JavaEE架构与程序设计-第二部分_第1页
JavaEE架构与程序设计-第二部分_第2页
JavaEE架构与程序设计-第二部分_第3页
JavaEE架构与程序设计-第二部分_第4页
JavaEE架构与程序设计-第二部分_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaEE核心编程第二局部:详解Servlet组件编程Servlet的生命周期请求与响应Cookie、会话上下文过滤器、监听器章节目录章节目录ServletAPI继承关系Servlet生命周期Servlet是多线程单实例的Servlet只有在第一次被调用时初始化一次,该实例被存储在容器中多个客户端并发访问时,Tomcat会启动多线程,并发访问Servlet实例如果某个Servlet需要在应用加载时被实例化,可以通过在web.xml中配置<load-on-startup>来完成HttpServlet类的声明形式publicabstractHttpServletextendsGenericServletimplementsServlet,ServleConfigServlet的继承关系两个顶级接口ServletServletConfig接口的实现类GenericServlet基于HTTP协议的实现类HttpServlet自定义的Servlet类往往都直接继承HttpServlet两个接口中主要的方法Servlet接口init(ServletConfig):被容器调用,调用一次service(ServletRequestreq,ServletResponseres):被容器调用destroy():被容器调用,Servlet实例被销毁时调用两个接口中主要的方法ServletConfig接口封装Servlet实例的初始化配置信息publicStringgetInitParameter(Stringname):获取Servlet的初始化参数值GenericServlet类的主要方法publicvoidinit():被容器调用,调用一次,往往被自定义的Servlet类覆盖。HttpServlet类的主要方法doGet(HttpServletRequestreq,HttpServletResponseresp):处理GET方式的请求doPost(….req,…resp):处理POST方式的请求。init():用来对Servlet实例化后进行一些自定义处理。destroy():用来实现Servlet实例被容器销毁前的一些自定义处理。Servlet的生命周期初始化构造方法init(ServletConfig)方法init()方法提供效劳service方法doXXX方法销毁destroy方法初始化参数配置和获取web.xml文件中配置Servlet的初始化参数<servlet><servlet-name>TestServlet</servlet-name><servlet-class></servlet-class><init-param><param-name>level</param-name>参数名<param-value>2.1</param-value>参数值</init-param><load-on-startup>1</load-on-startup></servlet>Servlet中获取初始化参数publicclassTestServletextendsHttpServlet{privateStringlev;publicTestServlet(){("调用构造方法");}@Overridepublicvoidinit(){lev=this.getInitParameter(“level”);//获取初始化参数}@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

}}章节目录请求与响应的接口请求转发器请求属性HttpServletRequest接口HttpServletRequest接口定义了大量获得请求信息的方法获得请求头的方法获得请求参数的方法获得客户端以及效劳器端信息的方法获得请求头的方法

getHeader():根据请求头名字获取请求头值getIntHeader():返回整型请求头的值getDateHeader():返回日期类型请求头值getHeaderNames():返回所有头的名字getHeaders():返回所有头的值获得请求参数的方法getParameter():根据请求参数名字返回请求参数值geParameterNames():返回所有请求参数的名字getParameterValues():将同一个请求参数名字的所有参数值作为数组返回获得客户端以及效劳器端信息的方法getRemoteAddr():获得远程地址getRemotePort():获得远程端口getLocalName():获得本地主机名getLocalPort():获得本地端口

HttpServletResponse接口HttpServletResponse接口定义大量获得响应信息的方法处理响应头信息的方法获得响应输出流及设置内容类型的方法响应重定向处理响应头信息的方法addHeader():在响应中添加一个头addIntHeader():在响应中添加一个整型头信息addDateHeader():在响应中添加一个Date类型信息setHeader():在响应中添加一个头信息setIntHeader():在响应中添加一个整型的头信息获得响应输出流及设置内容类型的方法getWriter():获得输出流PrintWriterout=response.getWriter();setContentType():设置响应的内容类型response.setContentType("text/html;charset=UTF-8");响应重定向HttpServletResponse中的sendRedirect()方法实现响应重定向Response.sendRedirect(url);响应重定向到另一个资源后,以前的请求信息并不会继续传递到重定向的组件中,是两个请求对象。sendRedirect()方法后的代码仍会被执行地址栏信息会变成重定向的组件的urlRequestDispatcher请求转发器如果希望请求中的信息能够继续传递到下一个资源,可以通过使用请求转发器的请求转发方法实现请求转发器的接口是RequestDispatcher当用RequestDispatcher请求转发后,地址栏内的信息仍是初始的url信息,客户端看不到转发后的urlRequestDispatcher请求转发器请求转发方法RequestDispatcherrd=request.getRequestDispatcher(url);Rd.forward(request,response);forward(ServletRequest

request,ServletResponse

response)请求属性HttpServletRequest接口中提供了一系列与请求属性有关的方法setAttribute(String

name,Obdjecto):将对象o使用名字name存储到请求对象中getAttribute(Stringname):通过属性名字name获取属性值removeAttribute(Stringname):通过属性名字删除属性章节目录Cookie的含义与作用JsessionidcookieCookie的概念和使用cookie是保存在客户端的文本ServletAPI提供了Cookie类,可以将文本信息封装成cookie对象HttpServletResponse接口提供了addCookie方法,将cookie添加到响应中HttpServletRequest接口中提供了getCookies方法,从请求中获得所有cookie对象Cookie开发实例使用实例学习Cookie使用cookie实现一个小时内,同一个客户端不需要重复登录的功能名字为jsessionid的cookie通过实验查看名字为jsessionid的cookiejsessionid的值为一个随机整数为后面章节学习会话做好准备章节目录HttpSession接口会话实现机制会话失效URL重写HttpSession接口客户端对效劳器端一次连续的访问过程,称为会话HttpSession接口用来表示会话对象HttpSession中和属性有关的方法setAttributegetAttributeremoveAttribute通过请求对象的方法获得会话对象getSessionJSP中的会话对象JSP中的内置对象session,是HttpSession对象默认情况下,JSP中总是创立session对象,可以直接使用<%session.setAttribute(“obj”,”test”);Stringobj=(String)session.getAttribute(“obj”);%>会话的实现机制会话的实现依赖于容器大多数容器采用基于cookie的实现机制基于cookie的实现机制,使用名字为JSESSIONID的cookie作为session的唯一标记会话使用实例通过实例展示会话编程完善教材案例,实现登录后查看个人信息的功能使用HttpSession来保存会话范围内的属性HttpSessionsession=request.getSession();session.setAttribute("custname",custname);获取会话属性值HttpSessionsession=request.getSession();Stringcustname=(String)session.getAttribute("custname");URL重写通过修改客户端浏览器设置,可以禁止发送cookie如果cookie被禁止,那么基于cookie实现的session将失效为了解决cookie禁止session失效的问题,可以使用URL重写技术会话超时为了有效使用内存,以及保证平安性,会话在一定时间内不被使用〔称为会话超时〕,将被销毁有三种策略可以使会话超时web.xml中配置会话超时时间使用setMaxInactiveInterval方法设置超时时间使用invalidate方法直接将某会话设置为失效章节目录ServletContext接口上下文属性上下文参数ServletContext接口每个应用都有一个唯一的上下文对象,即ServletContext对象ServletContext对象可以和请求、会话对象一样处理属性setAttributegetAttributeremoveAttributeServletContext使用实例使用实例展示上下文用法完善教材案例,参加计数器功能使用ServletContext属性保存计数器ServletContext参数在web.xml中可以配置上下文参数,在整个上下文中有效<context-param><param-name>path</param-name><param-value>/WEB-INF/props</param-value></context-param>各种属性比较请求、会话、上下文中均可以保存、获得、删除属性请求、会话、上下文都有如下三个方法setAttributegetAttributeremoveAttribute主要区别在于每种属性的生命周期不同建议尽量多使用请求属性,必须使用会话、上下文属性时才考虑使用章节目录事件类监听器事件类与监听器接口6个事件类,类名均以Event结尾某些操作,如启动/关闭容器、创立/销毁会话,都将触发一种事件发生,当发生了某种事件,容器将创立对应的事件类对象事件类与监听器接口ServletContextEvent:上下文事件ServletContextAttributeEvent:上下文属性事件ServletRequestEvent:请求事件ServletRequestAttributeEvent:请求属性事件HttpSessionEvent:会话事件HttpSessionBindingEvent:会话绑定事件事件类与监听器接口8个监听器接口,接口名均以Listener结尾监听器定义了监听方法,可以处理对应的事件ServletConexListener:上下文监听器,监听ServletContextEvent事件当创立ServletContext对象时,激发contextInitialized方法当销毁ServletContext对象时,激发contextDestroyed方法ServletContextAttributeListener:上下文属性监听器HttpSessionListener:会话监听器当创立一个Session对象时,激发sessionCreated方法当销毁一个Session对象时,激发sessionDestroyed方法HttpSessionActivationListener:会话活化监听器HttpSessionAttributeListener:会话属性监听器在HttpSession中添加一个属性时,激发attributeAdded方法当在Session中删除一个属性时,激发attributeRemoved方法当Session属性被重新设置时,激发attributeReplaced方法HttpSessionBindingListener:会话绑定监听器事件类与监听器接口事件类与监听器接口ServletRequesListener:请求监听器ServletRequesAttributeListener:请求属性监听器监听器开发实例监听器开发实例使用ServletContextListener完善计数器功能掌握监听器开发步骤、注册监听器的方法CounterService类save(intnumber)方法用来保存计数器值getNumber()方法用来读取计数器值CounterListenerimplementsServletContextListenercontextDestroyed(ServletContextEvente)上下午对象销毁时调用此方法,方法内获取上下文对象中count属性值,并调用save()方法保存到数据库中contextInitialized()上下文对象初始化时调用此方法,从数据库中获取计数器值,并放入上下文对象中。配置web.xml文件<listener>

<listener-class></listener-class></listener>监听器开发步骤根据实际情况选择要使用的监听器创立类实现监听器接口覆盖监听器的方法,实现应用中需要的逻辑在web.xml中注册监听器章节目录过滤器的作用过滤器的实现步骤过滤器概念过滤器运行在效劳器端,遵守一定的编码标准过滤器必须实现ServletAPI中的Filter接口过滤器用来执行应用中通用处理的程序,如记录日志、设置编码格式等过滤器有关APIFilter接口所有过滤器都必须实现Filter接口Init(FilterConfigfilterConfig):对filter对象进行初始化。调用一次,参数filterConfig对象可以获得初始化参数。doFilter(request,response,FilterChainchain):是过滤器提供效劳的方法,chain对象可以将request和response对象传递到过滤链上的下一个资源,或者目标资源Destroy():销毁的时候调用。过滤器有关APIFilterChain接口用来将请求传递到下一个资源,可能是下一个过滤器,也可能是最终要访问的资源,如JSP、Servlet等由FilterChain对象调用doFilter方法实现。FilterConfig接口封装过滤器的配置信息,如过滤器的名字、初始化参数等过滤器publicclassLoginFilterimplementsFilter{

publicvoidinit(FilterConfigarg0)throwsServletException{}

publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,FilterChainarg2)throwsIOException,ServletException{

}

publicvoiddestroy(){}}过滤器的配置<filter><filter-name>LoginFilter</filter-name><filter-class>com.etc.filter.LoginFilter</filter-class></filter><filter-mapping>

<filter-name>LoginFilter</filter-name>

<url-pattern>/admin/welcome.jsp</url-pattern></filter-mapping>获取过滤器的初始化参数<filter><filter-name>LoginFilter</filter-name><filter-class></filter-class><init-param><param-name>start</param-name><param-value>2</param-value></init-par

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论