Java杂谈(八)--Servlet/Jsp
haoteby 2025-05-28 17:16 11 浏览
终于正式进入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程序员给个列表告诉美工什么标签可以完成什么逻辑功能,他就可以专注于美工,也算是进一步隔离了前后台的工作吧!
3. 成就Web框架
框架是什么?曾经看过这样的定义:与模式类似,框架也是解决特定问题的可重用方法,框架是一个描述性的构建块和服务集合,开发人员可以用来达成某个目标。一般来说,框架提供了解决某类问题的基础设施,是用来创建解决方案的工具,而不是问题的解决方案。
正是由于Tag的出现,成就了以后出现的那么多Web框架,它们都开发了自己成熟实用的一套标签,然后由特定的Xml文件来配置加载信息,力图使得Web应用的开发变得更加高效。下面这些标签相应对很多人来说相当熟悉了:
<html:password>
<logic:equal>
<bean:write>
<f:view>
<h:form>
<h:message>
它们分别来自Struts和JSF框架,最强大的功能在于控制转发,就是MVC三层模型中间完成控制器的工作。Struts-1实际上并未做到真正的三层隔离,这一点在Struts-2上得到了很大的改进。而Jsf向来以比较完善合理的标签库受到人们推崇。
今天就大概讲这么多吧,再次需要强调的是Servlet/Jsp是学习J2ee必经之路,也是最基础的知识,希望大家给与足够的重视!
想要了解更多Java知识那就来关注我们吧! 精彩内容多多哦!不从错过哦!
多多关注
相关推荐
- wordpress集团公司网站模板:XSgr
-
小兽wordpress推出一款高端集团公司主题,打造高品质官网。高端是一种态度和坚持,因为我坚信贴合产品及品牌理念的高端深度定制才能最大化地呈现企业的务实严谨与产品的专业品质相比,某种程度上讲–...
- 宝塔搭建WordPress跨境电商外贸商城模板汉化woodmart7.5.1源码
-
大家好啊,欢迎来到web测评。本期给大家带来一套php开发的WoodmartV7.5.1汉化主题|跨境电商|外贸商城|产品展示网站模板WordPress主题,是wordpress开发的。上次是谁要的系...
- Wordpress建站设计技巧:用好Wordpress自带样板功能
-
作者:悦然wordpress建站(悦然建站)...
- 微软推出Azure平台WordPress模板:分分钟搭建博客
-
IT之家讯微软Azure云服务平台可以托管各种各样的Web服务,从企业应用后端服务到视频托管服务等等。WordPress是目前最为流行的博客平台,驱动着全球1/4的互联网网站。不过用户想要在Azur...
- wordpress公司展示型通用模板:XShw
-
主题介绍xshw公司模板是一款现代化风格、通用型公司展示的Wordpress公司建站模板,采用经典的颜色搭配、精致的模块布局、完善的列表模板、响应式自适应技术以及配置的大幅全屏轮播图、公司简介、业务介...
- WP模板开发中,怎样给wordpress网站的文章,添加点赞功能?
-
我们在网上浏览某些网站的文章时,在文章的结尾处,都会有一个点赞的按钮,如果觉得文章内容非常不错,就可以点击这个“点赞”按钮,给这篇文章进行点赞一下。在wordpress网站的模板主题开发中,我们可不可...
- 免费的WordPress模板
-
免费的WordPress模板有很多种类,适用于不同类型的网站需求。以下是一些推荐的免费WordPress模板,它们各具特色,适合多种用途:...
- 东港边检站开展全面清理自制执勤执法证件表单专项工作
-
为进一步提高边检机关依法行政和服务管理水平,根据部局和总站统一部署,6月3日下午,东港边检站迅速开展全面清理自制执勤执法证件表单专项工作。一是统一思想,提高认识。该站于6月3日召开专题会议,传达部局视...
- 两款超级好用的二维码生成器软件,铁铁们快码住
-
今天分享两款超级好用的二维码生成器,个人认为衡量是否是好用的二维码生成器的主要有以下维度(仅从用户体验角度)...
- 扫码填表如何拍摄现场照片?表单添加图片的二维码制作方法
-
现在通过扫描二维码来登记信息的方式非常的常见,有很多的应用场景会使用这种方式来统计数据,比如问卷调查、用户反馈、巡检结果等类型。通过扫码填写信息后,制作者可以及时的获取对应的数据做出反馈。那么表单二维...
- 纯干货∣教你如何制作一份具有法律效应的“电子合同”
-
表单中使用电子合同时,不仅需要进行功能设置,还需要制作一份PDF格式的模板...
- 金山表单硬核功能“在线考试”上线
-
近日,金山文档针对教师用户群体上线“在线考试”考试功能。教育从业者可在金山文档内完成考试、练习测验、竞赛和作业布置。与此同时,该功能还具备自动批改计分、答案解析、成绩展示、信息收集等特色功能。充分适配...
- 报名小程序怎么制作?借助这个报名表单工具一键搞定
-
报名表单广泛应用于各类活动、课程、会议和招募等场景中,用于收集报名者的个人信息和参与意愿,方便组织者进行统计、管理和沟通。表单制作不需要写代码,学会借助线上报名表单工具就能一键搞定。...
- 货代人的表单制作方式,该升级了!
-
很多在货代行业工作的人可能会思考是否将销售岗位转为操作岗位,因为货代销售工作需要不断迎接业绩的挑战,每个月都要全力以赴,但绩效考核的结果并不总是确定的。...
- 为你的WordPress widget建立表单
-
通过之前的三部分教程我们已经创建了一个自己的WordPresswidget。今天我们将给大家介绍如何为你的widget创建表单,以至于WordPress可以及时的更新widget设置。为widget...