《Java Web程序设计教程 教学课件 PPT 作者 范立锋 林果园 第3章 JSP和Servlet》由会员分享,可在线阅读,更多相关《Java Web程序设计教程 教学课件 PPT 作者 范立锋 林果园 第3章 JSP和Servlet(56页珍藏版)》请在金锄头文库上搜索。
1、第3章 Servlet和JSP,3.1 JSP的工作原理 3.2 JSP的注释方式 3.3 JSP声明方式 3.4 JSP表达式 3.5 JSP脚本段 3.6 JSP编译指令 3.7 JSP动作指令 3.8 JSP内置对象,3.9 Servlet开发流程 3.10 HttpServlet的应用 3.11 Servlet生命周期 3.12 自定义标签库 3.13 Servlet过滤器 3.14 Servlet监听器,3.1 JSP的工作原理(1),JSP的工作原理图如下图 所示 对该原理图进行说明如下:,3.1 JSP的工作原理(2),当一个JSP页面第一次被请求时,容器首先会把JSP页面转换成
2、Servlet。在转换时,所有HTML标签将被包含在println()语句中,所有JSP元素将会被转换成Java代码。 在转换的过程中,若JSP页面存在语法错误,转换会被终止,并向服务器和客户端输出错误信息。如果转换成功,转换后的Servlet会被编译成相应的class文件。 在调用Servlet时,首先执行jspInit()方法,然后调用jspService()方法处理客户端的请求。对客户端发送的每一个请求,JSP容器都会创建一个新的线程来处理。如果有多个客户端同时请求该JSP文件,JSP容器会为每个客户端请求创建对应一个线程。 如果jsp文件被修改,服务器将根据设置决定是否对该文件进行重新
3、编译。如果重新编译,内存中的Servlet会被新的编译结果取代。 Servlet被处理完毕以后,调用jspDestroy()方法结束它的生命周期,同时被JVM(Java虚拟机)的垃圾回收器回收。,返回,3.2 JSP的注释方式,HTML注释方式 格式: 说明:HTML注释将会被发送到客户端,用户查看页面源代码就可以看到这些注释。 JSP隐藏注释方式 格式: 说明:JSP隐藏注释不会被发送到客户端,用户使用查看源代码的方式是看不到的注释内容。,返回,3.3 JSP声明方式,语法格式如下: 注意: 1. 在一个JSP页面中可一次声明一个变量和方法,还可一次声明多个变量和方法,但是它们都只在当前页面
4、中有效。 2. JSP声明必须包含在标记内,并且每个声明的末尾都必须有一个分号。在使用声明时,不能在“%”和“!”之间留有空格。,返回,3.4 JSP表达式,JSP表达式用来在JSP页面输出结果 。表达式在运行后会被自动转换为字符串,然后插入到页面指定的位置。 语法格式: 应用示例: 得到的随机数是: ,返回,3.5 JSP脚本段,脚本段(Scriptlets)是JSP代码片段或脚本片段,嵌在“”标记中。在脚本段中可以定义变量、调用方法和进行各种表达式运算,每行语句后面加入分号。这种Java代码在Web服务器响应请求时会运行。 语法格式: 应用示例: ,返回,3.6 JSP编译指令,JSP编译
5、指令用于设置整个JSP页面的相关属性,比如页面的编码格式、所包含的文件等等。这些编译指令包含在“ ”标记中。 常用编译指令: page指令 include指令 taglib指令,返回,3.6.1 JSP编译指令page指令,page指令用于定义JSP页面中的全局属性,page指令包含属性说明如下:,返回,2.6.2 JSP编译指令include指令和taglib指令,include指令用于在JSP页面中包含其它文件。 语法格式: include指令包含的过程是静态的,包含的文件可以是JSP、HTML或者inc文件等等。 taglib指令允许用户使用标签库自定义新的标签 。 语法格式: 其中,u
6、ri用于根据标签前缀对自定义的标签进行唯一的命名 ;prefix用于指定标签的前缀 。,返回,3.7 JSP动作指令,JSP动作指令用于运行脚本动作,共有7种动作指令: jsp:include指令 jsp:forward指令 jsp:useBean指令 jsp:setProperty指令 jsp:getProperty指令 jsp:plugin指令 jsp:param指令,返回,3.7.1 JSP动作指令jsp:include,jsp:include指令用于在请求处理阶段包含来自一个Servlet或JSP页面的响应。 语法格式: 或 ,返回,3.7.2 JSP动作指令jsp:forward,j
7、sp:forward指令用于执行页面转向,将请求的处理转发到下一页面。 语法格式: 或 ,返回,3.7.3 JSP动作指令jsp:useBean,jsp:useBean指令用来在JSP页面内创建一个JavaBean实例。 语法格式: id属性指定了JavaBean的名称 , scope属性为JavaBean的有效范围 (request、session、page、application ), class属性指定了JavaBean所归属的类 。,返回,3.7.4 JSP动作指令jsp:setProperty,jsp:setProperty指令用来设置Bean属性值 。 语法格式: 或 或 或 ,返
8、回,3.7.5 JSP动作指令jsp:getProperty,jsp:getProperty指令用来读取Bean的属性值,并将其转换为一个字符串在页面上输出。 语法格式: 其中,name对应着jsp:useBean指令的id值,property对应着userBean中的属性名。,返回,3.7.6 JSP动作指令jsp:plugin 和jsp:param,jsp:plugin指令用于下载服务器端的JavaBean或Applet到客户端执行。 jsp:param指令用于设置参数值,它不能够单独使用,主要用在jsp:include指令、jsp:forward指令和jsp:plugin中。,返回,3.
9、8 JSP内置对象,内置对象是指不需要预先定义就可以在JSP页面中直接使用的对象,JSP共提供了9个内置对象 : request对象 response对象 session对象 out对象 page对象,application对象 pageContext对象 config对象 exception对象,返回,3.8.1 JSP内置对象request,request对象用于获取客户端提交的数据,这些数据包括头信息、客户端地址、请求方式等等。request对象常用的方法 如下:,返回,3.8.2 JSP内置对象response,response对象用于对客户端的请求做出动态的响应,向客户端发送数据。
10、response对象常用的方法 如下:,返回,3.8.3 JSP内置对象session,session对象可用来保存用户的会话信息和会话状态。 session对象常用的方法 如下:,返回,3.8.4 JSP内置对象out,out对象用来向客户端输出各种数据 。out 对象常用的方法 如下:,返回,3.8.5 JSP内置对象page,page对象就是指当前JSP页面本身,类似于Java中this。page对象常用的方法 如下:,返回,3.8.6 JSP内置对象application,application对象实现了用户间数据的共享,可存放全局变量 。 page对象常用的方法 如下:,返回,3.8
11、.7 JSP内置对象pageContext,pageContext对象用于管理对属于JSP中特殊可见部分中已经命名对象的访问。 pageContext对象常用的方法 如下:,返回,3.8.8 JSP内置对象config,config对象用来获取服务器初始化配置参数 。 config对象常用的方法 如下:,返回,3.8.9 JSP内置对象exception,exception对象用于处理JSP页面中发生的错误和异常,可以帮助了解并处理页面中的错误信息。 exception对象常用的方法 如下:,返回,3.9 Servlet开发流程,1.创建Servlet类,该类需要继承GenericServle
12、t 。 2.在web.xml文件中,对编写好的Servlet类进行配置。格式如下: Servlet名称 Servlet类路径 Servlet名称 映射匹配模式 ,返回,3.10 HttpServlet的应用,如果要创建一个基于Web的HTTP Servlet,需要继承“javax.servlet.http.HttpServlet”类,并重载HttpServlet的doGet()方法和doPost()方法。 其中doGet()方法用于处理GET方式的请求,doPost()方法用于处理POST方式的请求 。 具体实现流程与创建普通Servlet相似。,返回,3.11 Servlet的生命周期(1)
13、,Servlet的生命周期如下图所示,3.11 Servlet的生命周期(2),在Servlet生命周期中有三个重要方法: init(),负责Servlet的初始化工作 。 service(),处理客户端请求,并返回响应结果 。 destroy(),在Servlet容器卸载Servlet之前被调用,销毁Servlet对象,释放系统资源 。,返回,3.11.1 Servlet的生命周期(2)init(),Servlet加载和实例化是由容器来负责完成的,当服务器启动时,容器首先会定位并加载Servlet类,然后实例化该类的一个或者多个对象 。 Servlet被实例化后,容器会调用init()方法初
14、始化该Servlet对象,并传递实现ServletConfig接口的对象。 执行完init()方法后,Servlet就已经处于“已初始化”状态。,返回,3.11.2 Servlet的生命周期(2)service(),当客户端请求到来时,容器会首先为该请求创建一个ServletRequest对象和ServletResponse对象,其中ServletRequest代表请求对象,ServletResponse代表响应对象。然后容器调用service()方法,把请求和响应对象作为参数传递,从而把请求委托给Servlet。 在每次请求中,ServletRequest对象负责接受请求,ServletRe
15、sponse对象负责响应请求。,返回,3.11.3 Servlet的生命周期(2)destroy(),当Servlet需要销毁时,容器会在所有Servlet的service()线程完成之后(或在容器规定时间后)调用Servlet的destroy()方法,以此来释放系统资源,比如数据库的连接等等。 在destroy()方法被调用后,容器会释放Servlet实例占用的资源,该实例随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例。,返回,3.12 自定义标签库,JSP标签库(也称自定义标签库)可看成是一种生成基于XML脚本
16、的方法,它经由JavaBean(一种Java语言写成的可重用组件)来支持。从概念上将,标签库就是很简单而且可重用的代码结构。 标签处理器:自定义标签的核心元素。它用来处理标签的定义、属性、标签体的内容、信息及位置等。 标签库描述:一般使用.tld文件对标签进行描述,其实质上是一个XML文件,其中记录了自定义标签的属性、信息及位置。并且由服务器来确定通过该文件应该调用哪一个标签。 应用程序部署描述符:要使用自定义标签,需要在“web.xml”文件中定义自定义标签及描述自定义标签的tld文件的信息。 JSP页面:开发完自定义标签需要在JSP页面上进行相关的声明,之后就可以在页面中的任何地方使用自定义标签了。,3.12.1 自定义标签库,步骤如下: 1.建立标签处理器 。标签处理器对应类可直接继承SimpleTagSupport 类。 2.创建标签库描述文件。标签库描述文件是一个以.tld为后缀的文件,它包含了标签处理器的属性、描述信息和位置等等。 3.在JSP页面中使用自定义标签 。要想在JSP页面中使用标签,必须首先使用tagli