第3章 JSP及其相关技术
本章主要介绍了三部分内容:JSP、JavaBean和Servlet,其中重点介绍了JSP技术。
本章的内容是读者深入学习Java Web开发的基础,希望读者能够在理解的基础上做到融会贯通,为后面三大框架的学习打下坚实的基础。本章的主要内容如下:
q JSP的使用。该部分的主要内容包括什么是JSP,JSP具有哪些特点、JSP的运行机制、脚本元素、指令元素、动作元素和内置对象。
q JavaBean的使用。该部分的主要内容包括什么是JavaBean、如何定义JavaBean以及JavaBean属性的设置。
q Servlet的使用。该部分的主要内容包括Servlet的生命周期、Servlet的常用类及 接口。
3.1 JSP的使用
JSP指的是Java Server Pages,它是由SUN公司在1996年6月发布的用于开发动态Web应用的一项技术。JSP是基于Java Servlet的Web开发技术,由于其所具有的简单易学和跨平台等的特性,使其在各种动态Web程序设计语言中脱颖而出,它具有一套完整的语法规范,目前已经成为了Web开发中的主流选择,广泛应用于各个领域中。本节将对JSP技术做一简单介绍。
3.1.1 JSP 的技术特点
HTML语言适用于网页中静态内容的显示,而在开发基于Web的应用程序时,页面的内容往往会包括动态内容的展示以及与客户的交互,仅仅使用预先定义好的文字已经不能满足要求了。而JSP通过在使用HTML编写的静态网页中添加一些专有标签以及脚本程序就可以实现网页中动态内容的显示,它具有如下特点。
q 能够在任何Web或应用程序服务器上运行。
JSP可以适用于所有平台,这正是它优于ASP的地方。当从一个应用平台移植到另一个平台时,JSP和JavaBean的代码并不需要重新编译,这是因为Java的字节码是与平台无关的。
著名的Apache服务器也提供了对JSP的支持,而由于Apache服务器在NT、Unix和Linux上的广泛应用,也使得JSP拥有了更为广泛的运行平台。
q 将程序逻辑和页面显示相分离。
在使用JSP技术开发Web应用时可以将界面的开发与应用程序的开发分离开。Web开发人员使用HTML来设计界面,使用JSP标签和脚本来生成页面上的动态内容。在服务器端,JSP引擎负责解释JSP标签和脚本程序,生成所请求内容,并将结果以HTML页面的形式返回到浏览器。
JSP技术使开发人员之间的分工更加明确,界面开发人员对页面内容的修改不会影响程序逻辑,而程序逻辑发生变动时也不会影响页面内容。
q 采用标签简化页面开发。
JSP中对许多功能进行了封装,这些功能都是在与JSP相关的XML标签中进行动态内容生成时所必需的。使用JSP的标签可以执行访问和实例化JavaBeans组件、设置或检索组件属性以及下载Applet等功能。
q 组件可重用。
绝大多数JSP页面都依赖于可重用的、跨平台的组件(JavaBeans或者Enterprise JavaBeans)来执行应用程序中所要求的复杂的处理。开发人员在开发过程中能够共享和交换那些执行普通操作的组件,并将这些组件提供给更多的用户所使用。
基于组件的方法加速了项目的总体开发过程,提高了应用程序的开发效率。
3.1.2 JSP 的运行机制
在本小节中简单介绍JSP的运行机制。JSP运行机制如图3.1所示。
q 图3.1 JSP运行机制图
首先需要明确的是:当一个JSP文件第一次被请求时,JSP容器会先把该JSP文件转换成一个Servlet。
JSP的运行过程为:
(1)JSP容器先将该JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中如果发现JSP文件中存在任何语法错误,则中断转换过程,并向服务端和客户端返回出错信息。
(2)如果转换成功,则JSP容器使用javac将生成的Java源文件编译成相应的字节码文件*.class。该.class文件就是一个Servlet,Servlet容器会像处理其他的Servlet一样来处理它。
(3)由Servlet容器加载转换后的Servlet类(.class文件),创建一个该Servlet(JSP页面的转换结果)的实例,并执行Servlet的jspInit()方法,jspInit()方法在Servlet的整个生命周期中只会被执行一次。
(4)执行_jspService()方法来处理客户端的请求。对于每一个请求,JSP容器都会创建一个新的线程来处理它。如果有多个客户端同时请求该JSP文件,则JSP容器也会创建多个线程,使得每个客户端请求都对应一个线程。JSP运行过程中采用的这种多线程的执行方式可以极大地降低对系统资源的需求,提高系统的并发量和响应时间。要注意的是,第(3)步中生成的Servlet是常驻内存的,所以响应速度也是非常快的。
(5)如果.jsp文件被修改了,则服务器将根据设置决定是否对该文件重新编译,如果需要重新编译,则使用重新编译后的结果取代内存中常驻的Servlet,并继续上述处理过程。
(6)虽然JSP效率很高,但在第一次调用时往往由于需要转换和编译过程而产生一些轻微的延迟。此外,由于系统资源不足等原因,JSP容器会以某种不确定的方式将Servlet从内存中移去。当这种情况发生时会首先调用jspDestroy()方法。
(7)接着Servlet实例便被加入“垃圾收集”处理。
(8)当请求处理完成后,响应对象由JSP容器接收,并将HTML格式的响应信息发送回客户端。
%说明:可在jspInit()中进行一些初始化工作,如建立与数据库的连接,或建立网络连接,从配置文件中取一些参数等,在jspDestory()中释放相应的资源。
public void jspInit()方法:该方法在JSP页面初始化时被调用,用于完成初始化工作,类似于Servlet中的init()方法。
public void jspDestroy()方法:该方法在JSP页面将被销毁时调用,用来完成JSP的清除工作,类似于Servlet中的destroy()方法。
public void _jspService(javax.servlet.http.HttpServletRequest request, javax.servlet. http.HttpServlet Response response)方法:该方法对应JSP页面的主体body部分,由JSP容器自动生成,页面设计人员不能提供该方法的实现。
3.1.3 编写JSP文件
本小节将编写并运行一个简单的JSP文件,使读者对JSP文件有一个初步的认识。
【例3-1】 本示例编写一个简单的JSP文件,并与HTML文件的显示效果进行对比。
下面的代码就是一个简单的JSP文件,可以看到它的内容与普通的HTML文件是完全一样的,唯一的区别就是它的文件名后缀是jsp,而不是html。
……
展开