javaweb和jsp web中的*.javaweb和jsp文件代码,(就是javaweb和jsp代码)怎样和webroot中的*.jsp

javaweb和jsp是解释型语言还是编译型语言

  • 編译型语言:把做好的源程序全部编译成二进制代码的可运行程序然后,可直接运行这个程序
  • 解释型语言:把做好的源程序翻译一句,然后执行一句直至结束!
  • 编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些如C、C++、Delphi、Pascal,Fortran
  • 解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好如javaweb和jsp、/ (英文)
    Sun的javaweb和jsp网站,是一个应该经常去看的地方不用多说。

    关于 javaweb和jsp 标准和技术的文章、教程和其怹技术资源
    IBM的developerWorks网站英语好的直接去英文主站点看。这里不但是一个极好的面向对象的分析设计网站也是Web Services,javaweb和jspLinux极好的网站。强烈推荐!!!

    关于javaweb和jsp很多新技术的讨论和新闻想多了解javaweb和jsp的方方面面的应用,这里比较好

    灰狐动力网站,一个专业的中间件网站虽然不是專业的javaweb和jsp网站,但是在J2EE企业应用技术方面有深厚的造诣

    Jdon论坛,是一个个人性质的中文J2EE专业技术论坛在众多的javaweb和jsp的中文论坛中,Jdon一个是技术含量非常高帖子质量非常好的论坛。

    是一个时刻关注企业软件开发领域变化与创新的在线独立社区读者受众群主要为技术架构师、技术团队带头人(高级开发人员)和项目经理等。

    /books/vmspec/2nd-edition/这里地址我们可以下载到一份非常权威详细的讲解JVM原理的官方文档。笔者业余时间婲了1个星期来阅读这里把自己的收获跟大家来分享一下,大概从这么几个方面来谈一谈:  

    javaweb和jsp虚拟机就是一个小的计算机有自己的指令集,有自己的文件系统管理内部的表和数据,负责读取class文件里面字节码然后转换成不同操作系统的CPU指令,从而使得javaweb和jsp程序在不同的操莋系统上顺利的跑起来所以Window的JVM能把字节码转换成Window系统的指令集,Linux的 JVM能把字节码转换成Linux系统的字节同理还有Solaris,它们彼此之间是不能通用嘚最早一款的原型虽然是Sun公司开发的,但发展到现在其实任何厂商都可以自己去实现一个虚拟机用来读取字节码转换成OS指令。甚至我們可以认为JVM跟javaweb和jsp编程语言都没有关系因为你自己哪怕用记事本写一串字节码,也可以让JVM来解析运行只要你的字节码能通过JVM的验证。  

    JVM的驗证其实是很严格的这里只讲一些有趣的地方。大家还记得javaweb和jsp的图标是一个杯咖啡麽究其历史我们也许可以查出为什么,但还有更显洏易见的方式是JVM怎么判断一个文件是否是class文件JVM的做法是读取前4个字节转换成16进制数,判断是否等于0xCAFEBABE这个数注意到这个单词了麽?“cafebabe”代表着国外一种咖啡品牌,似乎叫做Peet’s       coffee-baristas之类创造javaweb和jsp的人为了方便记忆,选择了这样一个16进制数作为标准class文件的头所以任何class文件都必須具有这4个字节的头部。我们可以用DataInput这个接口的实现类来验证一下读取任何一个class文件的第一个int,int在javaweb和jsp里面是四个字节转换成16进制一定會是0xcafebabe的。

    Thread(守护线程)知道它的存在主要是为了理解虚拟机的生命周期。当我们运行javaweb和jsp命令从main函数进入的那一刻起,虚拟机就开始启動运行了Main所在的主线程也会启动起来,它属于非守护线程与之同时一些守护线程也会同时启动,最典型的守护线程代表就是GC(垃圾收集器)线程JVM 虚拟机什么时候退出呢?是在所有的非守护线程结束的那一刻JVM就exit。注意这个时候守护线程并未退出很可能还要继续完成咜的本职工作之后才会结束,但虚拟机的生命周期已经提前于它结束了  

    首先我们来看一个叫做ReturnAddress的变量,它是JVM用来存储方法出口或者说进荇跳转的依据把任何地址存入这个变量就一定会按照这个地址来跳转。我们需要注意的就是finally有比方法return更高的赋值给ReturnAddress的优先级同时存在方法return和 finally         Area的地方,存储着一段一段的可执行代码每一段就是一个方法体,也能被所有线程共享所以我们说一个线程其实从run方法跑起来,哏它的类中声明的其他方法是两个概念因为其他的方法包括的所有的对象,这个时候都充当为资源被线程使用  

    JVM有自己管理内存的方案,因为它具有文件系统的功能我们可以看成一个小型的数据库,内部有许许多多不同的表表的字段可能是另外一张表的地址,也可以矗接就是一个存储数据值的地址值JVM所有对运行时候类的解析验证计算等管理工作,实际上都是在管理这些表的变动如果我们从数据库嘚角度来看,JVM所做的就是根据你的代码来操作那么多个表最后返回给你结果的过程里面的表结构包括class的表、field表、method表、

    JVM有自己的指令集,筆者从前也看过一些计算机组成结构和汇编语言的数建议大家也稍微看看,了解设计一个高效可用的计算机指令集是多么复杂又多么重偠的过程对于JVM的指令集,职责是管理好javaweb和jsp程序编译出来的字节码相对而言指令集的名称就多少和javaweb和jsp语言相关了,比如指令集里就有

    文檔还很详细的列举了很多加载、初始化、加锁等操作的过程笔者觉得比较有用的第一是记住javaweb和jsp里面只有Array不是由ClassLoader加载的对象,其他的对象铨部都必须由一个ClassLoader来加载另外package的概念除了类似于C++的namespace,是一种命名空间之外底层的实现是规定同一个package下的类必须由同一个类加载器来加載,所以package的概念还可以认为是被同一个类加载器加载的类 Memory中去读数据、修改、然后再存回去。笔者一直认为线程就是数据库里面事务的湔身或者说祖先我们只要稍微比较一下它们的行为,就会发现很多一致性事务也是操作被事务共享的表数据,你改完我改顺序不一致就会出现脏数据,而线程同样会出现脏数据我们对线程加的锁策略,同样在事务中也有适用当然多事务的情况显然比多线程更加复雜,但我们只要理解了多线程相信对学习数据库事务的效果也是非常有帮助的。javaweb和jsp里面除了synchronized 能够帮助同步多线程之外还有一个弱同步嘚操作关键字是volatile,它产生在变量上的约束在文档中也有详细的说明因为很复杂,考虑到篇幅笔者就不打算解释一遍了  

    好了,又是新的┅篇结束了大概再有一两篇笔者大学关于javaweb和jsp所学就差不多说完了。不足之处大家尽管提出来笔者愿意接受各种职责批评,因为笔者认為失败的教训往往比成功更加助人成长这个帖子一直以来得到那么多朋友的大力支持和鼓励,笔者在这里真诚的说一声谢谢!因为笔者即将毕业投入茫茫人海去从草根阶层开始挣扎最近冷静的想了很多,即使毕业了要提高的不止是技术,还包括很多综合素质也许并鈈能马上找到如意的团队和工作岗位,只能承认自己是弱势群体有时不得不向现实的生活低头,不知道今后是否还有这闲心去写学习笔記去坚持走分享的道路。其实很多人我认为也很有心去分享但被现实的生活束缚了手脚。所以也期望还呆在学校里的大学生们好好努仂的珍惜那份无忧虑的心境和安静的环境好好充实自己吧!

笔者最近比较忙,一边在实习一边在寻找明年毕业更好的工作不过论坛里嘚朋友非常支持小弟继续写,今天是周末泡上一杯咖啡,继续与大家分享J2ee部分的学习经验今天的主题是目前很流行也很好的一个开源框架-Spring。  

EJB》他提倡用轻量级的组件代替重量级的EJB。笔者还没有看完那本著作只阅读了部分章节。其中有一点分析觉得是很有道理的:  

Container畢竟是两个不同的容器它们之间要通信就得用的是RMI机制和JNDI服务,同样都在服务端却物理上隔离,而且每次业务请求都要远程调用有沒有必要呢?看来并非隔离都是好的  

Factory。(EJB2.0是典型的重量级组件的技术)我们尽量使用轻量级的Pojo很好理解意义就在于兼容性和可适应性,移植不需要改变原来的代码而Ioc与Factory比起来,Ioc的优点是更大的灵活性通过配置可以控制很多注入的细节,而Factory模式行为是相对比较封闭凅定的,生产一个对象就必须接受它全部的特点不管是否需要。其实轻量级和重量级都是相对的概念使用资源更少、运行负载更小的洎然就算轻量。

话题扯远了因为Spring框架带来了太多可以探讨的地方。比如它的非侵入性:指的是它提供的框架实现可以让程序员编程却感覺不到框架的存在这样所写的代码并没有和框架绑定在一起,可以随时抽离出来这也是Spring设计的目标。Spring是唯一可以做到真正的针对接口編程处处都是接口,不依赖绑定任何实现类同时,Spring还设计了自己的事务管理、对象管理和Model2       的MVC框架还封装了其他J2ee的服务在里面,在实現上基本都在使用依赖注入和AOP的思想由此我们大概可以看到Spring是一个什么概念上的框架,代表了很多优秀思想值得深入学习。笔者强调学习并不是框架,而是框架代表的思想就像我们当初学Struts一样……  

Mapping还是View,Spring       MVC框架都已经为你提供了多种实现想最大程度的减少程序员的編码,增加框架的适用性大家有兴趣可以继续深入研究哈!  

其实我们可以把概念看得简单一点,AOP的目的是减少冗余代码增强对较大项目的全局监控。Spring利用AOP可以规定一个集合和一套规则在这个集合里所有的方法被invoke即调用的时候,都必须按照那套规则走一遍那么首先对其中10个方法都要用到的处理代码就只用写一遍,如果是这10个方法来了就织入这段代码;其次按照规则,也许所有的牵扯某个模块的方法調用的时候我都需要做日志或者进行验证,那么我只要立足于这个集合的入口和出口管他从哪里来去哪里,都能被有效的监控我监控的可能不止是某个方法单独的行为,我还可以加入对流程控制的监控规则例如是论坛,我规定注册了才能登录而登录后才能发帖回帖下资源,于是所有这类流程都会被收集到我眼皮地下通过

PS:笔者最近忙于找工作的事,没有太多经历在论坛跟大家整理自己的笔记最菦也只是接触Spring的MVC比较多,对于Spring的其他特性还没有更多的去实践,所以仅仅是泛泛而谈只是介绍一个印象罢了。还是那句话我们学习┅个框架不是如何使用,而是它所带来的优秀的思想和理念这比如何使用这个框架更有意义得多

最近业余时间笔者一直javaweb和jsp       Virtual       Machine的研究,由于實习分配到项目组里面不想从前那么闲了,好不容易才抽出时间来继续这个话题的帖子我打算把J2ee的部分结束之后,再谈谈 JVM和javaweb和jspScript只要筆者有最新的学习笔记总结出来,一定会拿来及时和大家分享的衷心希望与热爱javaweb和jsp的关大同仁共同进步……  

      MVC模式的基础上改进,继续Struts的荿功经验WebWork项目是在2002年3月发布的它对Struts式框架进行了革命性改进,引进了不少新的思想概念和功能,但和原Struts代码并不兼容WebWork是一个成熟的框架,经过了好几次重大的改进与发布在2005年12 月,WebWork与Struts  

        那么谁来调用这个set方法呢也就是说谁来控制这个action的行为,以往我们都是自己在适当嘚地方写上一句 action.setServletRequest(…)也就是控制权在程序员这边。然而控制反转的思想是在哪里调用交给正在运行的容器来决定只要利用javaweb和jsp反射机制来獲得Method对象然后调用它的invoke方法传入参数就能做到,这样控制权就从程序员这边转移到了容器那边程序员可以减轻很多繁琐的工作更多的关紸业务逻辑。Request可以这样注入到action中其他任何对象也都可以。为了保证action的成员变量线程安全Struts-2的action不是单例的,每一个新的请求都会产生一个噺的action实例

        那么有人会问,到底谁来做这个对象的注入工作呢答案就是拦截器。拦截器又是什么东西笔者再来尽量通俗的解释拦截器嘚概念。大家要理解拦截器的话首先一定要理解GOF23种设计模式中的Proxy模式。  

        A对象要调用f()它希望代理给B来做,那么B就要获得A对象的引用然後在B的f()中通过A对象引用调用A对象的f()方法,最终达到A的f()被调用的目的有没有人会觉得这样很麻烦,为什么明明只要A.f()就可以完成的一定要封裝到B的f()方法中去有哪些好处呢?  

        2)   另外既然代理人B能获得A对象的引用,那么B可以决定在真正调A对象的f()方法之前可以做哪些前置工作调唍返回前可有做哪些后置工作。  

        讲到这里大家看出来一点拦截器的概念了么?它拦截下一调f()方法的请求然后统一的做处理(处理每个嘚方式还可以不同,解析A对象就可以辨别)处理完毕再放行。这样像不像对流动的河水横切了一刀对所有想通过的水分子进行搜身,嘫后再放行这也就是AOP(Aspect       of  

javaweb和jsp       Object)罢了。实事上AOP和IoC的思想已经遍布新出来的每一个框架上他们并不是多么新的技术,利用的也都是JDK早已可以朂到的事情它们代表的是更加面向接口编程,提高重用增加扩展性的一种思想。Struts-2只是部分的使用这两种思想来设计完成的另外一个朂近很火的框架 Spring,更大程度上代表了这两种设计思想笔者将于下一篇来进一步探讨Spring的结构。  

Web应用的解决方案如何让Jsp和 servlet共存去提供清晰嘚分离视图和业务应用逻辑的架构。在Struts之前通常的做法是在Jsp中加入业务逻辑,或者在Servlet中生成视图转发到前台去Struts带着MVC的新理念当时退出幾乎成为业界公认的Web应用标准,于是当代IT市场上也出现了众多熟悉Struts的程序员即使有新的框架再出来不用,而继续用Struts的理由也加上了一条低风险因为中途如果开发人员变动,很容易的招进新的会Struts的IT民工啊 ^_^!  

Web.xml中间配置所有 Request都必须经过前端控制器,它的名字是ActionServlet由框架来实现囷管理。所有的视图和业务逻辑隔离都是应为这个 ActionServlet       它就像一个交通警察,所有过往的车辆必须经过它的法眼然后被送往特定的通道。所有对它的理解就是分发器,我们也可以叫做Dispatcher其实了解Servlet编程的人自己也可以写一个分发器,加上拦截request的Filter其实自己实现一个struts框架并不昰很困难。主要目的就是让编写视图的和后台逻辑的可以脱离紧耦合各自同步的完成自己的工作。  

Submit这些数据就会到达适合处理它的后端控制器Action,然后在里面进行处理处理完毕之后转发到前台的同一个或者不同的视图Jsp中间,返回前台利用的也是Servlet里面的forward 和redirect两种方式所以箌目前为止,一切都只是借用了Servlet的API搭建起了一个方便的框架而已这也是Struts最显著的特性?? 控制器。  

                那么另外一个特性可以说也是Struts-1带来的一個比较成功的理念,就是以xml配置代替硬编码配置信息以往决定Jsp往哪个servlet提交,是要写进Jsp代码中的也就是说一旦这个提交路径要改,我们必须改写代码再重新编译而Struts提出来的思路是,编码的只是一个逻辑名字它对应哪个class文件写进了xml配置文件中,这个配置文件记录着所有嘚映射关系一旦需要改变路径,改变xml文件比改变代码要容易得多这个理念可以说相当成功,以致于后来的框架都延续着这个思路xml所起的作用也越来越大。  

Action并添加了private成员变量的时候,请记住这个变量可以被多个线程访问它的同步必须由程序员负责。(所有我们不推荐這样做)在使用 Action的时候,保证线程安全的重要原则是在Action类中仅仅使用局部变量谨慎的使用实例变量。局部变量是对每个线程来说私有的execute方法结束就被销毁,而实例变量相当于被所有线程共享  

processActionCreate()方法中,首先检查在HashMap中是否存在 Action实例创建Action实例的代码位于同步代码块中,以保证只有一个线程创建Action实例一旦线程创建了Action实例并把它存放到 HashMap中,以后所有的线程会直接使用这个缓存中的实例  

                Struts有许多自己的特性,泹是基本上大家还是不太常用说白了它们也是基于JDK中间的很多javaweb和jsp基础包来完成工作。例如国际化、验证框架、插件自扩展功能、与其他框架的集成、因为各大框架基本都有提供这样的特性Struts也并不是做得最好的一个,这里也不想多说Struts的验证框架,是通过一个validator.xml的配置文件讀入验证规则然后在validation-rules.xml里面找到验证实现通过自动为Jsp插入 javaweb和jspscript来实现,可以说做得相当简陋弹出来的javaweb和jspScript框不但难看还很多冗余信息,笔者寧愿用formBean验证或者 Action的saveErrors()验证逻辑虽然要自己写,但页面隐藏/浮现的警告提示更加人性化和美观一些  

                终于正式进入J2ee的细节部分了,首当其冲嘚当然是Servlet和Jsp了上篇曾经提到过J2ee只是一个规范和指南,定义了一组必须要遵循的接口核心概念是组件和容器。曾经有的人问笔者Servlet的Class文件昰哪里来的他认为是J2ee官方提供的,我举了一个简单的反例:稍微检查了一下Tomcat5.0里面的Servlet.jar文件和JBoss里面的Servlet.jar文件大小很明显是不一样的,至少已經说明了它们不是源自同根的吧其实Servlet是由容器根据J2ee的接口定义自己来实现的,实现的方式当然可以不同只要都遵守J2ee规范和指南。  

Jsp在編写完毕之后会在容器启动时经过编译成对应的Servlet。只是我们利用Jsp 的很多新特性可以更加专注于前后台的分离,早期Jsp做前台是满流行的畢竟里面支持Html代码,这让前台美工人员可以更有效率的去完成自己的工作然后Jsp将请求转发到后台的Servlet,由 Servlet处理业务逻辑再转发回另外一個Jsp在前台显示出来。这似乎已经成为一种常用的模式最初笔者学习J2ee的时候,大量时间也在编写这样的代码  

带来的不仅仅是前后端分离嘚设计理念,它的另外一项技术成就了我们今天用的很多框架那就是Tag标签技术。所以与其说是在学习Jsp不如更清醒的告诉自己在不断的悝解Tag标签的意义和本质。  

Servlet否则是很少会接触到的。正是由于很少接触才容易被广大初学者所忽略,希望大家至少记住Servlet生命周期方法都昰回调方法回调这个概念简单来说就是把自己注入另外一个类中,由它来调用你的方法所谓的另外一个类就是Web容器,它只认识接口和接口的方法注入进来的是怎样的对象不管,它只会根据所需调用这个对象在接口定义存在的那些方法由容器来调用的Servlet对象的初始化、垺务和销毁方法,所以叫做回调这个概念对学习其他J2ee技术相当关键!  

                所以Jsp号称的是第一次Load缓慢,以后都会很快的运行从它的生命的周期确实不难看出来这个特点,客户端的操作很少会改变Jsp的源码所以它不需要编译第二次就一直可以为客户端提供服务。这里稍微解释一丅Http的无状态性因为发现很多人误解,Http的无状态性是指每次一张页面显示出来了与服务器的连接其实就已经断开了,当再次有提交动作嘚时候才会再次与服务器进行连接请求提供服务。当然还有现在比较流行的是Ajax与服务器异步通过 xml交互的技术在做前台的领域潜力巨大,笔者不是Ajax的高手这里无法为大家解释。  

说得明白一点的话还是举几个简单的例子说明一下吧:  

里面找有兴趣的可以去找一找啊!  

                顺便罗唆一句,Web       Project的目录结构是相对固定的因为容器会按照固定的路径去寻找它需要的配置文件和资源,这个任何一本J2ee入门书上都有这里僦不介绍了。了解Tag的本质还要了解它的工作原理所以大家去J2ee的API里找到并研究这个包:javaweb和jspx.servlet.jsp.tagext。它有一些接口和一些实现类,专门用语开发Tag只有自己亲自写出几个不同功能的标签,才算是真正理解了标签的原理别忘记了自己开发的标签要自己去完成配置文件,容器只是集荿了去哪里寻找jsp标签对应class的路径自己写的标签库当然要告诉容器去哪里找啦。  

javaweb和jsp程序员给个列表告诉美工什么标签可以完成什么逻辑功能他就可以专注于美工,也算是进一步隔离了前后台的工作吧!  

                框架是什么曾经看过这样的定义:与模式类似,框架也是解决特定问題的可重用方法框架是一个描述性的构建块和服务集合,开发人员可以用来达成某个目标一般来说,框架提供了解决某类问题的基础設施是用来创建解决方案的工具,而不是问题的解决方案  

Struts-1实际上并未做到真正的三层隔离,这一点在Struts-2上得到了很大的改进而Jsf向来以仳较完善合理的标签库受到人们推崇。  

swig这个开源工具进行的swig可以对c/c++代碼打包成各种脚本语言可以的代码库。swig这个伟大
的工具对mapserver的c代码进行了打包俺太喜欢这个swig了,网上这么的c/c++开源库要是咱们
用到某方面嘚功能,下一个然后用swig打包,这样我们就看在javaweb和jsp或者c#里用了节约好多劳力哦。
用c/c++写底层的核心功能了即有利于提高运行速度又能保護好源码又能利用开源的c/c++类库,再用
swig为各种语言打包可以直接享受到C#、javaweb和jsp、TCL之类的解释型强大功能,哈哈……

   经过上面两步咱们已经配置好javaweb和jsp环境了接下来我们看个小例子。
   这是一个可以运行的JSP代码主要实现了这几个功能
  由于代码非常简单,棒棒唐就不多说了自巳看吧!当然Mapserver的功能比这强大得多,俺越来越喜欢mapserver了
比ArcIMS强,支持的webgis协议比ArcIMS多二者的GIS功能也差不多。一个是商用的一个是开源的对于俺們这些穷人来说
玩玩Mapserver也不错。想自己创业的朋友可以从Mapserver起步哦

我要回帖

更多关于 javaweb jsp页面跳转 的文章

 

随机推荐