Java学习杂谈(八)[Java编程]
本文“Java学习杂谈(八)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
终于正式进入J2ee的细节部份了,首当其冲的当然是Servlet和Jsp了,上篇曾经提到过J2ee只是一个标准和指南,定义了一组必必要遵守的接口,核心概念是组件和容器.曾经有的人问笔者Servlet的Class文件是那边来的?他认为是J2ee官方供应的,我举了一个简单的反例:略微查抄了一下Tomcat5.0里面的Servlet.jar文件和JBoss里面的Servlet.jar文件大小,很明显是不一样的,至少已经阐明了它们不是源自同根的吧.其实Servlet是由容器按照J2ee的接口定义自己来实现的,实现的方法当然可以差别,只要都服从J2ee标准和指南.
上述只是一个常见的误区罢了,奉告我们要编译运行Servlet,是要依靠于实现它的容器的,不然连jar文件都没有,编译都无法举行.那么Jsp呢? Java Server Page的简称,是为了开策动态网页而诞生的技术,其本质也是Jsp,在编写完毕之后会在容器启动时经过编译成对应的Servlet.只是我们操纵Jsp 的很多新特点,可以越发专注于前后台的别离,早期Jsp做前台是满风行的,毕竟里面支持Html代码,这让前台美工人员可以更有效率的去完成自己的工作.然后Jsp将恳求转发到后台的Servlet,由Servlet处理业务逻辑,再转发回别的一个Jsp在前台显示出来.这仿佛已经成为一种常用的情势,最初笔者学习J2ee的时刻,大量时间也在编写这样的代码.
固然目前做前台的技术越来越多,比方Flash、Ajax等,已经有很多人不再认为Jsp重要了.笔者认为Jsp带来的不但仅是前后端别离的计划理念,它的别的一项技术成就了我们本日用的很多框架,那就是Tag标签技术.所以与其说是在学习Jsp,不如更复苏的奉告自己在不断的理解Tag标签的意义和本质.
1.Servlet以及Jsp的生命周期
Servlet是Jsp的实质,固然容器对它们的处理有所辨别.Servlet有init()办法初始化,service()办法举行Web服务,destroy()办法举行销毁,从生到灭都由容器来掌握,所以这些办法除非你想自己来实现Servlet,不然是很少会接触到的.恰是由于很少接触,才简单被广大初学者所忽视,但愿大家至少记着Servlet生命周期办法都是回调办法.回调这个概念简单来说就是把自己注入别的一个类中,由它来调用你的办法,所谓的别的一个类就是Web容器,它只熟习接口和接口的办法,注入进来的是怎样的对象不管,它只会按照所需调用这个对象在接口定义存在的那些办法.由容器来调用的Servlet对象的初始化、服务和销毁办法,所以叫做回调.这个概念对学习其他J2ee技术相当关键!
那么Jsp呢?本领上是Servlet,还是有些辨别的,它的生命周期是这样的:
a)一个客户端的Request到达服务器 ->
b)判断能否第一次调用 -> 是的话编译Jsp成Servlet
c)否的话再判断此Jsp能否有改变 -> 是的话也重新编译Jsp成Servlet
d)已经编译近来版本的Servlet装载所需的其他Class e)公布Servlet,即调用它的Service()办法
所以Jsp号称的是第一次Load迟钝,今后城市很快的运行.从它的生命的周期确切不丢脸出来这个特点,客户端的操作很少会改变Jsp的源码,所以它不需求编译第二次就一向可认为客户端供应服务.这里略微注释一下Http的无状况性,因为发现很多人曲解,Http的无状况性是指每次一张页面显示出来了,与服务器的衔接其实就已经断开了,当再次有提交行动的时刻,才会再次与服务器举行衔接恳求供应服务.当然还有目前对比风行的是Ajax与服务器异步通过 xml交互的技术,在做前台的范畴潜力宏大,笔者不是Ajax的高手,这里无法为大家注释.2.Tag标签的本质
笔者之前说了,Jsp本身初衷是使得Web利用前后台的开辟可以脱离耦合脱离有效的举行,惋惜这个理念的奉献反倒不如它带来的Tag技术对J2ee的奉献要大.大概已经有很多人开始利用Tag技术了结并不理解它.所以才倡议大家在学习J2ee开始的时刻一定要认真学习Jsp,其实最重要的就是懂得标签的本质.
Html标签我们都很熟习了,有<html> 、<head> 、<body> 、<title> ,Jsp带来的Tag标签遵守一样的格局,大概说更严峻的Xml格局标准,比方<jsp:include> 、 <jsp:useBean> 、<c:if>、<c:forEach>等等.它们没有什么奥秘的地方,就其源头也还是Java Class罢了,Tag标签的实质也就是一段Java代码,大概说一个Class文件.当配置文件设置好去那边探求这些Class的途径后,容器负责将页面中存在的标签对应到呼应的Class上,履行那段特定的Java代码,如此罢了.
说得懂得一点的话还是举几个简单的例子阐明一下吧:
<jsp:include>去那边找履行什么class呢?首先这是个jsp类库的标签,当然要去jsp类库探求呼应的class了,一样它也是由Web容器来供应,比方 Tomcat就应当去安装目录的lib文件夹下面的jsp-api.jar里面找,有爱好的可以去找一找啊!
<c:forEach>又去那边找呢?这个是由Jsp2.0版本举荐的和核心标志库的内容,比方<c:if> 就对应在页面中做if判断的功效的一断Java代码.它的class文件在jstl.jar这个类库里面,常常还需求和一个standard.jar类库一同导入,放在具体Web项目的WEB-INF的lib目录下面便可以利用了.
趁便罗唆一句,Web Project的目录构造是相对固定的,因为容器会按照固定的途径去探求它需求的配置文件和资源,这个任何一本J2ee入门书上都有,这里就不介绍了.理解Tag的本质还要理解它的工作原理,所以大家去J2ee的API里找到并研究这个包:javax.servlet.jsp.tagext.它有一些接口,和一些实现类,专门用语开辟Tag,只有自己亲身写出几个差别功效的标签,才算是真正理解了标签的原理.别忘掉了自己开辟的标签要自己去完成配置文件,容器只是集成了去那边探求jsp标签对应class的途径,自己写的标签库当然要奉告容器去那边找啦.
说了这么多,我们为什么要用标签呢?完好在Jsp里面来个<% %>便可以在里面肆意写Java代码了,但是长期实践发现页面代码统一都是与html同气势的标志语言越发有助于美工人员举行开辟前台,它不需求懂Java,只要Java程序员给个列表奉告美工什么标签可以完成什么逻辑功效,他便可以专注于美工,也算是进一步断绝了前后台的工作吧!
以上是“Java学习杂谈(八)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |