版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章Servlet基础本章思维导图本章目标理解Servlet的运行原理及生命周期掌握Servlet的编写及部署掌握Servlet对表单数据的处理掌握Servlet对HTTP请求报头的处理掌握重定向和请求转发的使用以及区别Servlet是基于Java语言的Web服务器端编程技术,是Sun公司提供的一种实现动态网页的解决方案。Servlet是运行在Servlet容器中的Java类,它能处理Web客户的HTTP请求,并产生HTTP响应。初识ServletServlet对请求的处理和响应过程可进一步细分为如下几个步骤:接收HTTP请求;取得请求信息,包括请求头和请求参数数据;调用其他Java类方法,完成具体的业务功能;实现到其他Web组件的跳转(包括重定向或请求转发);生成HTTP响应(包括HTML或非HTML响应)。Servlet的特点高效、方便功能强大、可移植性好Servlet对请求的处理和响应过程Servlet是使用ServletAPI(应用程序设计接口)及相关类和方法的Java程序。ServletAPI包含两个软件包:jakarta.servlet包:包含支持所有协议的通用的Web组件接口和类,主要有jakarta.servlet.Servlet接口、jakarta.servlet.GenericServlet类、jakarta.servlet.ServletRequest接口、jakarta.servlet.ServletResponse接口。jakarta.servlet.http包:包含支持HTTP协议的接口和类,主要有jakarta.servlet.http.HttpServlet类、jakarta.servlet.http.HttpServletRequest接口、jakarta.servlet.http.HttpServletResponse接口。Servlet的体系结构ServletAPI的主要接口和类之间的关系
HttpServlet主要方法方法方法描述service(HttpServletRequestreq,HttpServletResponseresp)HttpServlet在实现Servlet接口时,重写了service()方法,该方法会自动判断用户的请求方式;若为GET请求,则调用HttpServlet的doGet()方法;若为POST请求,则调用doPost()方法。因此,开发人员在编写Servlet时,通常只需要重写doGet()或doPost()方法,而不要去重写service()方法。如果Servlet收到一个HTTP请求而你没有重载相应的do方法,它就返回一个说明此方法对本资源不可用的标准HTTP错误doGet(HttpServletRequestreq,HttpServletResponseresp)此方法被本类的service()方法调用,用来处理一个HTTPGET请求doPost(HttpServletRequestreq,HttpServletResponseresp)此方法被本类的service()方法调用,用来处理一个HTTPPOST请求Servlet生命周期是指Servlet实例从创建到响应客户请求,直至销毁的过程。Servlet程序本身不直接在Java虚拟机上运行,由Servlet容器负责管理其整个生命周期。在Servlet生命周期中,会经过创建、初始化、服务可用、服务不可用、处理请求、终止服务、销毁七种状态。Servlet生命周期可分为四个阶段:加载和实例化、初始化、处理请求、销毁。Servlet生命周期Servlet生命周期中七种状态间的转换关系以及转换过程的四个阶段Servlet生命周期加载和实例化处理请求销毁初始化Servlet的创建是指加载和实例化两个过程Servlet容器在如下时刻加载和实例化一个Servlet:在服务器运行中,客户机首次向Servlet发出请求时;重新装入Servlet时,如:服务器重新启动、Servlet被修改;在为Servlet配置了自动装入选项(load-on-startup)时,服务器在启动时会自动装入此Servlet。加载和实例化Servlet实例化后,Servlet容器将调用Servlet的init(ServletConfigconfig)方法来对Servlet实例进行初始化;如果初始化没有问题,Servlet在Web容器中会处于服务可用状态;如果初始化失败,Servlet容器会从运行环境中清除掉该实例;当Servlet运行出现异常时,Servlet容器会使该实例变为服务不可用状态。Web程序维护人员可以设置Servlet,使其成为服务不可用状态,或者从服务不可用状态恢复成服务可用状态。初始化处理请求服务器接收到客户端请求,会为该请求创建一个“请求”对象和一个“响应”对象并调用service()方法,service()方法再调用其他方法来处理请求;在Servlet生命周期中,service()方法可能被多次调用。当多个客户端同时访问某个Servlet的service()方法时,服务器会为每个请求创建一个线程,这样可以并行处理多个请求,减少请求处理的等待时间,提高服务器的响应速度。但同时也要注意对同一对象的并发访问问题。销毁当Servlet容器需要终止Servlet(比如Web服务器即将被关掉或需要出让资源),它会先调用Servlet的destroy()方法使其释放正在使用的资源。在Servlet容器调用destroy()方法之前,必须让当前正在执行service()方法的任何线程完成执行,或者超过了服务器定义的时间限制。在destroy()方法完成后,Servlet容器必须释放Servlet实例以便被垃圾回收。Servlet的创建过程创建JavaWeb项目创建ServletServlet的声明配置Servlet的部署运行Servlet创建Servlet的声明配置信息主要包括Servlet的描述、名称、初始参数、类路径以及访问地址等。Servlet的可通过项目配置文件web.xml完成;Servlet的声明配置还可以通过注解方式实现,注解@WebServlet用于将一个类声明为Servlet;注解@WebServlet会在程序部署时被Servlet容器处理,容器将根据具体的属性配置把相应的类部署为ServletServlet的声明配置通过web.xml进行Servlet声明配置示例<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="/2001/XMLSchema-instance"xmlns="https://jakarta.ee/xml/ns/jakartaee"version="5.0"...><display-name>ch02</display-name><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list><servlet><description></description><display-name>HelloServlet</display-name><servlet-name>HelloServlet</servlet-name><servlet-class>com.zkl.ch02.servlet.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/HelloServlet</url-pattern></servlet-mapping></web-app>web.xml中通过“<servlet></servlet>”元素声明Servlet,其子元素及其描述如下表:Servlet的声明配置属性名类型描述<description>String指定该Servlet的描述信息,等价于@WebServlet的description属性<display-name>String指定该Servlet的显示名,通常配合工具使用,等价于@WebServlet的displayName属性<servlet-name>String指定Servlet的名称,一般与Servlet的类名相同,要求在一个web.xml文件内名字唯一,等价于@WebServlet的name属性<servlet-class>String指定Servlet类的全限定名,即:包名.类名<init-param>指定Servlet初始化参数,等价于@WebServlet的initParams属性,若有多个参数可重复定义此元素。此元素为可选配置<param-name>String指定初始参数名<param-value>String指定初始参数名对应的值<load-on-startup>int指定Servlet的加载顺序,等价于@WebServlet的loadOnStartup属性<async-supported>boolean指定Servlet是否支持异步操作模式,默认为false,等价于@WebServlet的asyncSupported属性web.xml中"<servlet-mapping></servlet-mapping>”元素用于指定Servlet的URL映射,其子元素及其描述如下表:Servlet的声明配置属性名类型描述<servlet-name>String用来指定要映射的Servlet名称,要与<servlet>声明中的<servlet-name>值一致<url-pattern>String指定Servlet的URL匹配模式,等价于@WebServlet的urlPatterns属性或value属性@WebServlet注解当Web项目中的Servlet文件太多,会导致web.xml配置信息过长,且云开发时不便操作。因此,Servlet的声明配置还可以通过@WebServlet注解方式来实现。注解@WebServlet用于将一个类声明为Servlet,该注解会在程序部署时被Servlet容器处理,容器将根据具体的属性配置把相应的类部署为Servlet。注解@WebServlet的属性及描述属性名类型描述nameString指定Servlet的名字,可以为任何字符串,一般与Servlet的类名相同,如果没有显式指定,则该Servlet的取值即为类的全限定名urlPatternsString[]指定一组Servlet的URL匹配模式,可以是匹配地址映射(如:/SimpleServlet)、匹配目录映射(如:/servlet/*)和匹配扩展名映射(如:*.action)valueString[]该属性等价于urlPatterns属性。两个属性不能同时使用loadOnStartupint指定Servlet的加载顺序。当此选项没有指定时,表示容器在该Servlet第一次被请求时才加载;当值为0或者大于0时,表示容器在应用启动时就加载这个Servlet。值越小,启动该servlet的优先级越高。原则上不同的Servlet应该使用不同的启动顺序数字initParamsWebInitParam[]指定一组Servlet初始化参数,为可选项asyncSupportedboolean声明Servlet是否支持异步操作模式,默认为falsedescriptionString指定该Servlet的描述信息displayNameString指定该Servlet的显示名,通常配合工具使用@WebServlet( name="XXServlet",urlPatterns={"/XX"}, initParams={@WebInitParam(name="username",value="qst")}, loadOnStartup=0,asyncSupported=true, displayName="XXServlet",description="Servlet样例" )publicclassXXServletextendsHttpServlet{ ……}注解@WebServlet的使用示例
Servlet3.0及以上版本既支持@WebServlet注解的方式,也支持web.xml配置文件方式。而在Servlet2.5及以下版本的规范中,Servlet的声明只能通过在web.xml中配置完成。超链接形式的数据请求语法格式示例链接地址中的“LinkRequestServlet”为请求地址;“pageNo”表示请求参数;“2”为pageNo请求参数的值;“&”为多个参数间的关联符;“queryString”表示表示另一个请求参数;“QST”为queryString请求参数的值处理超链接请求数据<ahref=”URL地址?参数=参数值[&参数=参数值...]”>链接文本</a>……<body><ahref="LinkRequestServlet?pageNo=2&queryString=QST">下一页</a></body>……发送请求的URL地址可以是绝对地址,如:http://localhost:8080/chapter02/LinkRequestServlet。也可以是相对地址,如:LinkRequestServlet、../LinkRequestServlet等形式。在开发中大多数使用相对地址,以便于项目的移植。注意当用户通过超链接发送的请求到达Servlet容器时,包含数据的请求将被容器转换为HttpServletRequest对象。对请求数据的处理工作便由HttpServletRequest对象完成。HttpServletRequest对象常用的数据处理方法有:publicStringgetParameter(Stringname)
返回由name指定的用户请求参数的值。publicString[]getParameterValues(Stringname)
返回由name指定的一组用户请求参数的值。publicEnumerationgetParameterNames()
返回所有客户请求的参数名。处理超链接请求数据容器在将请求转换为HttpServletRequest对象之后,还会根据请求的类型调用不同的请求方法对用超链接的GET请求则会调用doGet()方法;对于Form表单的POST请求则会调用doPost()方法处理超链接请求数据的Servlet实例演示处理超链接请求数据Form表单数据请求语法格式示例处理Form表单请求数据<formaction=”URL”method=”GET/POST”enctype=“application/x-www-form-urlencoded或multipart/form-data”> <inputtype=“text”name=“username”/> …… <inputtype=”submit”/></form><formaction="FormRequestServlet"method="POST"><p>用户名:<inputname="username"type="text"></p><p>密
码:<inputname="password"type="password"></p><p>信息来源:<inputname="channel"type="checkbox"value="网络">网络<inputname="channel"type="checkbox"value="报纸">报纸<inputname="channel"type="checkbox"value="亲友">亲友</p><p><inputtype="submit"value="提交"/><inputtype="reset"value="重置"/></p></form>请求的服务器端Servlet地址请求类型请求参数表单提交按钮Form表单在enctype属性缺省或取值为application/x-www-form-urlencoded情况下,无论是Get请求类型还是Post请求类型,均通过HttpServletRequest对象来获取请求数据。处理Form表单请求数据的Servlet实例演示处理Form表单请求数据客户端向服务器请求数据方式常用有两种:超链接和Form表单;超链接一般用于获取/查询资源信息,属于GET请求类型,请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连。由于其安全性(如:请求数据会以明文显示在地址栏上)以及请求地址的长度限制,一般仅用于传送一些简单的数据;Form表单一般用于更新资源信息,默认使用GET请求类型,多使用POST请求类型。由于POST请求类型理论上没有数据大小限制,可用表单来传较大量的数据;HttpServletRequest接口使用getParameter()或getParameterValues()方法来获取GET请求或POST请求方式传送过来的请求数据。Servlet数据处理总结重定向是指由原请求地址重新定位到某个新地址,原有的request请求失效,客户端看到的是新的request请求返回的响应结果,客户端浏览器地址栏变为新请求地址。下图演示由请求ServletA到ServletB的重定向过程重定向两次请求两次响应重定向通过HttpServletRequest对象的sendRedirect()方法实现,该方法会通知客户端去重新访问新指定的URL地址,其语法格式如下:其中:location参数用以指定重定向的URL,它可以是相对路径或绝对路径。示例表示重定向到当前应用程序(chapter02)的根目录下的index.jsp页面重定向publicvoidsendRedirect(Stringlocation)throwsjava.io.IOExceptionresponse.sendRedirect("/chapter02/index.jsp");sendRedirect()方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源注意请求转发是指将请求再转发到其他地址,转发过程中使用的是同一个request请求,转发后浏览器地址栏内容不变。下图演示由请求ServletA到ServletB的转发过程请求转发请求转发的过程发生在服务器内部,对客户端是透明的。服务器只能从当前应用内部查找相应的转发资源,而不能转发到其它应用的资源。请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发给另外一个资源,并让该资源对此请求进行响应。RequestDispatcher接口有以下两个方法:forward()方法:将请求转发给其他资源。include()方法:将其他资源并入到当前请求中。请求转发语法:其中:请求转发RequestDispatcherdispatcher=request.getRequestDispatcher(Stringpath);dispatcher.forward(ServletRequestrequest,ServletResponseresponse);path参数用以指定转发的URL,只能是相对路径;request和response参数取值为当前请求所对应的HttpServletRequest和HttpServletResponse对象。请求转发示例表示请求转发到当前项目站点的根目录下的index.jsp页面请求转发与重定向对HttpServletRequest对象属性的存取。HttpServletRequest对象属性的存取语法RequestDispatcherdispatcher=request.getRequestDispatcher("/index.jsp").forward(request,response);//下述代码request对象类型为HttpServletRequestrequest.setAttribute("attrobj",“value");//将attrobj属性值存储到request对象中request.getAttribute("attrobj");//从request对象中取出attrobj属性值重定向和请求转发都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有很大的区别:转发只能将请求转发给同一个Web应用中的组件;而重定向不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,或者重定向到其他站点的资源;重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而请求转发过程结束后,浏览器地址栏保持初始的URL地址不变;重定向对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;请求转发在服
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小区保安职责及奖惩制度
- 企业作风要求及奖惩制度
- 劳动纪律为何靠奖惩制度
- 公司安全奖惩制度
- 护士管理奖惩制度细则
- 招生计划方案奖惩制度
- 收款奖惩制度办法汇编
- 教师晋职晋级奖惩制度
- 敬老院安全考核奖惩制度
- 文明施工扬尘奖惩制度
- 5.1人民代表大会制度 课件(23张幻灯片)+内嵌视频 道德与法治统编版八年级下册
- 动火作业与受限空间安全管理标准
- 2026年包头轻工职业技术学院单招综合素质考试题库附答案详解(基础题)
- 2026年当辅警笔试题库及一套完整答案
- 2026年兴安职业技术学院单招职业倾向性测试题库及答案详解(新)
- 国家基层糖尿病防治管理指南(2025版)
- 2025年国企招聘考试(建筑工程及造价)经典试题及答案
- (2026)中华人民共和国海关注册登记和备案企业信用管理办法解读课件
- 2025CSCO胰腺癌诊疗指南课件
- 慈善基金会内控制度
- DB15∕T 385-2025 行业用水定额
评论
0/150
提交评论