版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章Servlet编程进阶本章主要内容Servlet
API请求处理过程Web应用和Servlet的生命周期ServletConfig对象ServletContext对象3.1ServletAPI进一步思考Servlet容器、Web应用以及自定义的Servlet是如何联系在一起的?为什么每次编写Servlet时都是去继承HttpServlet?为什么Servlet类中只重写Service()方法就可以处理各种请求?3.1ServletAPI通用具体的协议3.1ServletAPIServletAPI分为两部分,上层通用、下层与具体的协议相关,这样的设计主要是使代码具有一定的解耦性。ServletAPI的核心是Servlet接口,所有的Servlet类都必须实现该接口。GenericServlet抽象类实现了Servlet接口,HttpServlet是它的子类。因为目前的Web访问都是基于HTTP协议的,因此自定义Servlet类时继承HttpServlet即可。3.2请求的处理过程GenericServletHttpServlet1)当访问HelloServlet的请求发起,Tomcat首先实例化HelloServlet对象;2)作为专门处理HTTP请求的Servlet容器,Tomcat解析客户端的请求数据,创建HttpServletRequset对象及HttpServletResponse对象;3)Tomcat找到HttpServlet中public修饰的service(ServletRequset,ServletResponse)方法,开始执行(因为Tomcat容器是第三方,无权调用HelloServlet中protected修饰的service()方法,所以继续向父类查询)。说明:这个service()方法只是将自己的参数的数据类型都强转为HttpServletRequset和HttpServletResponse,然后就去调用protectedvoidservice(HttpServletRequset,HttpServletResponse)方法。4)因为是HelloServlet对象发起的调用,所以按照多态性,service(HttpServletRequset,HttpServletResponse)调用,不再执行父类HttpServlet中的servie()方法,而是执行子类HelloServlet中重写的service()方法。3.3Web应用和Servlet的生命周期Web应用生命周期启动:加载Web应用中web.xml文件数据到内存;为Web应用创建一个ServletContext对象;对需要在Web应用启动阶段创建的Servlet进行创建和初始化;对Filter过滤器进行初始化。运行:所有的Servlet都处于待命状态,随时可以响应客户端的请求,为之提供服务。终止:销毁Web应用中所有处于运行态的Servlet对象、Filter对象和与Web应用相关的对象。3.3Web应用和Servlet的生命周期Servlet生命周期(1)创建Servlet<servlet> <servlet-name>demo</servlet-name> <servlet-class>DemoServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet><servlet-mapping> <servlet-name>demo</servlet-name> <url-pattern>/demo</url-pattern></servlet-mapping>设置<load-on-startup>配置项大于0,使得Servlet的实例化、初始化发生在服务器启动时,数字代表加载Servlet的顺序,越小优先级越高。3.3Web应用和Servlet的生命周期Servlet生命周期(2)初始化Servlet容器创建Servlet对象后,就调用init(ServletConfig)方法,完成对Servlet对象的初始化。通过ServletConfig对象,可以获取当前Web应用的ServletContext对象。初始化阶段打通了Servlet对象、ServletConfig对象和ServletContext对象之间的通道。3.3Web应用和Servlet的生命周期Servlet生命周期(3)运行Servlet这是Servlet生命周期中的主要时段,每当请求到达,Servlet就一次次的进入运行状态。3.3Web应用和Servlet的生命周期Servlet生命周期(4)销毁Servlet当Web应用被终止时,Servlet容器会先调用Web引用中所有Servlet对象的destory()方法,然后再销毁这些Servlet对象。在destory()中,可以释放Servlet占用的资源,例如关闭文件流,关闭与数据库的连接等。容器还会销毁与Servlet对象关联的ServletConfig对象。3.3Web应用和Servlet的生命周期【例3-1】Servlet的生命周期演示。public
classDemoServletextendsHttpServlet{
publicDemoServlet(){ System.out.println("创建DemoServlet"); }
protected
voidservice(HttpServletRequestrequest, HttpServletResponseresponse)
throwsServletException,IOException{ System.out.println("DemoServletservice方法被调用"); }
public
voiddestroy(){ System.out.println("DemoServlet销毁"); }
public
voidinit(ServletConfigconfig)throwsServletException{
super.init(config); System.out.println("DemoServlet初始化"); }}3.3Web应用和Servlet的生命周期启动Tomcat服务,观察Console控制台的输出。在浏览器地址栏中输入访问地址,观察控制台输出。结果:构造方法、初始化init()方法以及service()方法依次被执行。3.3Web应用和Servlet的生命周期再次刷新页面,观察控制台输出。结果:service()方法依次被执行。3.3Web应用和Servlet的生命周期修改web.xml文件,为DemoServlet添加<load-on-startup>配置,重启服务器。注意:不要进行Servlet的访问,直接观察控制台的输出。结果:创建、初始化Servlet对象。3.3Web应用和Servlet的生命周期停止服务器,查看控制台输出。结果:销毁方法destory()被执行。3.4ServletConfig对象向Servlet对象传递参数:按照Sun的Servlet规范,将参数写在web.xml文件中。web.xml中定义的参数属于某个Servlet的参数,由ServletConfig对象保存,相当于是局部变量只对配置该参数的Servlet有效属于所有Servlet的参数,由ServletContext对象保存,为所有Servlet共享。3.4ServletConfig对象【例3-2】ServletConfig应用举例。假设有一个网页版的聊天室,限制在线人数maxOnline。Servlet工作在单例模式,服务器中只有唯一的一个该对象对客户端的请求予以响应,它以多线程并发的方式工作。配置最高在线人数,可以限制访问量。<servlet> <servlet-name>login</servlet-name> <servlet-class>LoginServlet</servlet-class>
<init-param> <param-name>maxOnline</param-name> <param-value>1000</param-value> </init-param></servlet><servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern></servlet-mapping>3.4ServletConfig对象方式1:在init()方法中读取参数。方式2:在service()方法中读取参数。publicvoidinit(ServletConfigconfig)throwsServletException{//不能丢失,向Servlet对象传入ServletConfig对象 super.init(config); System.out.println(config.getInitParameter("maxOnline"));}protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ ServletConfigconfig=super.getServletConfig();//手动获取 System.out.println(config.getInitParameter("maxOnline"));}3.4ServletConfig对象public
classLoginServletextendsHttpServlet{
private
intonline=0;//在线人数计数器
private
intmaxOnline; //在init()方法中获取参数
public
voidinit(ServletConfigconfig)throwsServletException{
super.init(config); maxOnline=Integer.parseInt(config.getInitParameter("maxOnline")); } //在service()方法的业务处理过程中使用参数
protected
voidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
if(online<maxOnline){ //准予登录,进入登录逻辑处理…… System.out.println("登录成功."); online++;//在线人数加1 }else{ //禁止登录处理…… System.out.println("聊天室人数已满."); } }}3.5ServletContext对象ServletContext是Servlet与容器之间直接通信的接口。在Web应用启动时由容器创建,Web应用终止时销毁,它属于Web应用,即为Web应用中的所有Servlet共享。ServletContext接口中提供了一些方法,可以实现在Web应用范围内存取Servlet的共享数据。3.5ServletContext对象【例3-3】ServletContext应用举例。假设有一个电商网站的后台商品管理系统,在数据查询时需要用到分页功能。为了保持各类商品的浏览风格一致、在每个页面中都显示相同数目的数据行(pageSize)。3.5ServletContext对象在web.xml中的配置如下:<context-param><!—设置size=15--> <param-name>size</param-name> <param-value>15</param-value></context-param>public
classFindBookListServletextendsHttpServlet{ @Override
protected
voidservice(HttpServletRequestreq, HttpServletResponseres)throwsServletException,IOException{ //获取ServletContext对象 ServletContextcontext=super.getServletContext(); System.out.println(context.getInitParameter("size")); }}3.5ServletContext对象【例3-4】使用ServletContext记录网站访问次数。我们在上网的时候,某些网站会显示“您是访问本网站的第**名用户”,或者网站出于自身流量统计的需求,也会对总访问次数进行记录。voidsetAttribute(String,Object):将取值为Object的对象存储
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产后大出血术后康复护理查房
- 2025年一级建造师执业考试(水利水电工程管理与实务)仿真试题及答案
- GABRA5-modulator-1-生命科学试剂-MCE
- Fmoc-Val-Ala-Gly-生命科学试剂-MCE
- 2026年济宁汶上县协管员讲解员招考(15人)易考易错模拟试题(共500题)试卷后附参考答案
- 2026年泰安市直事业单位笔试易考易错模拟试题(共500题)试卷后附参考答案
- 护理课件表情包设计入门秘籍
- 2026年河南省新乡县事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 2026年河南商丘永城市食品药品监督管理局招考15人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年河南三门峡市第二批事业单位人才引进219人(招才引智)易考易错模拟试题(共500题)试卷后附参考答案
- 北京市西城区2026年中考二模英语试题(含答案)
- 2026年人教版初一政治(道德与法治)下学期期末考试试卷及答案(共四套)
- 2026眼镜镜片制造过程评估及镀膜工艺Plus偏光镜研发趋势说明
- (三模)济南市2026届高三5月针对性训练生物试卷(含答案)
- 2026宁夏电投永利能源有限公司招聘21人考试备考题库及答案解析
- 广东省湛江航运集团有限公司招聘笔试题库2026
- 金牛区驷马桥等街道2026年公开招聘社区专职工作人员(26人)笔试备考试题及答案详解
- 成都市青白江区区属国有企业2026年春季第一批次公开招聘工作人员(17人)考试参考题库及答案解析
- 2026中国报废汽车拆解行业盈利动态与需求趋势预测报告
- 一对一党员帮扶工作制度
- 山东博政投资发展(集团)有限公司招聘笔试题库2026
评论
0/150
提交评论