版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第十二章第十二章 服务器端小应用程序服务器端小应用程序Servlet计算机科学与技术系计算机科学与技术系2主要内容主要内容 Servlet概述概述 Java Servlet API Servlet编程编程 实例应用实例应用计算机科学与技术系计算机科学与技术系312.1 Servlet概述概述 常用的常用的Web服务器:服务器:IIS、Apache、Weblogic、Websphere、JBOSSDBServerWeb Server浏览器4l 通常的动态网页技术:通常的动态网页技术:CGI (Common GateWay Interface)API常用的有(常用的有(NSAPI,ISAPI)A
2、SP(Active Server Page)ASP.NET;PHP(Personal Home Page)Servlet;JSP(Java Server Page)l Servlet是在是在Java2平台下取代平台下取代 CGI 的一种技术,的一种技术,是一个接收请求,作出响应的网络服务是一个接收请求,作出响应的网络服务Java类。类。12.1 Servlet概述概述5计算机科学与技术系计算机科学与技术系12.1 Servlet概述概述12.1.1 Servlet简介简介l Servlet:服务器端小应用程序。:服务器端小应用程序。l Servlet:是:是J2EE平台的组成部分。平台的组成部
3、分。l Servlet程序:用程序:用Java Servlet API开发的一种开发的一种标准的标准的Java扩展程序,不能独立运行,只能运行在扩展程序,不能独立运行,只能运行在启用了启用了Java的的Web服务器上或应用服务器上服务器上或应用服务器上,并扩,并扩展了该服务器的能力。展了该服务器的能力。l Servlet:是运行在:是运行在请求和面向请求服务器请求和面向请求服务器上的模块。上的模块。6计算机科学与技术系计算机科学与技术系12.1 Servlet概述概述12.1.2 Servlet工作原理工作原理l 接收来自客户端的请求,将处理结果以动态网页形式接收来自客户端的请求,将处理结果以
4、动态网页形式返回客户端浏览器,以浏览器返回客户端浏览器,以浏览器/服务器方式工作。服务器方式工作。l Servlet通过创建一个通过创建一个框架框架来扩展服务器的能力,以来扩展服务器的能力,以提供在提供在Web上进行请求和响应服务。上进行请求和响应服务。l Java Servlet API 跨服务器平台跨服务器平台712.1 Servlet概述概述12.1.3 Servlet的基本流程的基本流程(1) 客户端(浏览器)通过客户端(浏览器)通过HTTP提出请求;提出请求;(2) Web服务器接收该请求并将其发给服务器接收该请求并将其发给Servlet。如。如果这个果这个Servlet尚未被加载,
5、尚未被加载,Web服务器将把它服务器将把它加载到加载到Java虚拟机并且执行它;虚拟机并且执行它;(3) Servlet将接收该将接收该HTTP请求,并执行某种处理;请求,并执行某种处理;(4) Servlet将向将向Web服务器返回应答;服务器返回应答;(5) Web服务器将从服务器将从Servlet收到的应答发送给客户收到的应答发送给客户端。端。计算机科学与技术系计算机科学与技术系812.1 Servlet概述概述l Servlet的基本流程的基本流程计算机科学与技术系计算机科学与技术系912.1 Servlet概述概述10.1.5 Servlet的基本流程如下:的基本流程如下:(1) 客
6、户端(浏览器)通过客户端(浏览器)通过HTTP提出请求;提出请求;(2) Web服务器接收该请求并将其发给服务器接收该请求并将其发给Servlet。如。如果这个果这个Servlet尚未被加载,尚未被加载,Web服务器将把它加服务器将把它加载到载到Java虚拟机并且执行它;虚拟机并且执行它;(3) Servlet将接收该将接收该HTTP请求并接收某种处理;请求并接收某种处理;(4) Servlet将向将向Web服务器返回应答;服务器返回应答;(5) Web服务器将从服务器将从Servlet收到的应答发送给客户收到的应答发送给客户端。端。10计算机科学与技术系计算机科学与技术系12.1 Servl
7、et概述概述12.1.4 Servlet的生命周期的生命周期l 始于将它装入始于将它装入Web服务器的内存时,服务器的内存时,l 并在终止或重新装入并在终止或重新装入Servlet时结束。时结束。11计算机科学与技术系计算机科学与技术系12.1 Servlet概述概述12.1.4 Servlet的生命周期的生命周期l 始于将它装入始于将它装入Web服务器的内存时,并在终止或重新装入服务器的内存时,并在终止或重新装入Servlet时结束。时结束。l 初始化初始化 在下列时刻装入在下列时刻装入Servlet: 装入装入Servlet后,服务器创建一个后,服务器创建一个Servlet实例并且调用实例
8、并且调用Servlet的的init(ServletConfig)方法对其进行初始化。方法对其进行初始化。 在初始化阶段,在初始化阶段,Servlet初始化参数被传递给初始化参数被传递给Servlet配配置对象。置对象。l 如果已配置自动装入选项,则在启动服务器时自动装入。如果已配置自动装入选项,则在启动服务器时自动装入。l 在服务器启动后,客户机在服务器启动后,客户机首次向首次向Servlet发出请求发出请求时。时。l 重新装入重新装入Servlet时。时。12计算机科学与技术系计算机科学与技术系12.1 Servlet概述概述12.1.4 Servlet的生命周期的生命周期l 始于将它装入始
9、于将它装入Web服务器的内存时,并在终止或重新装入服务器的内存时,并在终止或重新装入Servlet时结束。时结束。l 请求处理请求处理l 对于到达服务器的客户机请求,服务器创建特定于请求的一对于到达服务器的客户机请求,服务器创建特定于请求的一个个“请求请求”对象和一个对象和一个“响应响应”对象。对象。l 服务器调用服务器调用Servlet的的service()方法方法,该方法用于传递,该方法用于传递“请求请求”和和“响应响应”对象。对象。l service()方法从方法从“请求请求”对象获得请求信息、处理该请求,对象获得请求信息、处理该请求,并用并用“响应响应”对象的方法将响应传回客户机。对象
10、的方法将响应传回客户机。l service()方法可以调用其他方法来处理请求,例如方法可以调用其他方法来处理请求,例如doGet()、doPost()或其他的方法或其他的方法。13计算机科学与技术系计算机科学与技术系12.1 Servlet概述概述12.1.4 Servlet的生命周期的生命周期l 始于将它装入始于将它装入Web服务器的内存时,并在终止或重新装入服务器的内存时,并在终止或重新装入Servlet时结束。时结束。l 终止终止l 当服务器不再需要当服务器不再需要Servlet,或重新装入,或重新装入Servlet的新实例的新实例时,服务器会调时,服务器会调Servlet的的destr
11、oy()方法。方法。1412.1 Servlet概述概述12.1.6 Servlet的开发运行环境的开发运行环境l JVMServlet引擎引擎Web服务器服务器l Servlet引擎包括有:引擎包括有:lJSWDK,Tomcat,Resin lJRun,WebSphere,Web Logic等等等等 计算机科学与技术系计算机科学与技术系15计算机科学与技术系计算机科学与技术系12.1 Servlet概述概述12.1.6 Servlet的开发运行环境的开发运行环境ServletServlet开发环境:开发环境:利用利用TomcatTomcat作为服务器端的作为服务器端的ServletServl
12、et编译、运行环境,同时它也编译、运行环境,同时它也支持支持JSPJSP1 1、安装、安装TomcatTomcat2 2、配置环境变量:、配置环境变量:npathpath中增加中增加TomcatTomcat安装目录的安装目录的 binbin子目录子目录nclasspathclasspath中增加中增加TomcatTomcat安装目录的安装目录的commonlibcommonlib子目录中的子目录中的Servlet-api.jarServlet-api.jar3 3、启动、启动TomcatTomcat1612.1 Servlet工作原理工作原理12.1.7 编写运行编写运行Servlet的一般步
13、骤的一般步骤l 启动支持启动支持Servlet的服务器程序。的服务器程序。l 编写编写Servlet,编译,编译Servlet。l 把生成的把生成的class文件存放到文件存放到Tomcat指定目录下。指定目录下。WEB-INFclassesl 客户利用浏览器通过客户利用浏览器通过Servlet的的URL访问该访问该Servlet. http:/hostname:8080/HelloWorldServletl web.xml文件文件计算机科学与技术系计算机科学与技术系17import java.io.IOException;import java.io.PrintWriter;import j
14、avax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class test extends HttpServletprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
15、IOExceptionres.setContentType(text/html;charset=utf-8); PrintWriter out=response.getWriter();out.println( hello world! );out.flush();计算机科学与技术系计算机科学与技术系18计算机科学与技术系计算机科学与技术系12.2 Java Servlet API12.2.1 javax.servlet包包l Servlet接口接口l ServletConfig接口接口l ServletContext接口接口l ServletRequest接口接口l ServletRespo
16、nse接口接口l GenericServlet类类l ServletException异常异常19计算机科学与技术系计算机科学与技术系12.2 Java Servlet API12.2.2 javax.servlet.http包包l HttpServletRequest接口接口l HttpServletResponse接口接口l HttpSession接口接口l HttpSessionBindingListener接口接口l HttpSessionContextl HttpServlet类类l HttpSessionBindingEvent类类l Cookie类类2010.1 Servlet概
17、述概述10.1.4 Java Servlet包包2112.2 Java Servlet API12.2.3 javax.servlet.Servlet接口接口l 规定了每个规定了每个Servlet所必须实现的方法。所必须实现的方法。计算机科学与技术系计算机科学与技术系l void init(ServletConfig config) throws ServletException l void service(ServletRequest req, ServiceResponse res) throws ServletException, IOException l void destroy(
18、) l String getServletInfo() l ServletConfig getServletConfig() 22计算机科学与技术系计算机科学与技术系1. init()方法方法l 用于初始化,在用于初始化,在Servlet启动时调用。启动时调用。l 可以配置服务器,以在启动服务器或客户机首次访可以配置服务器,以在启动服务器或客户机首次访问问Servlet时时装入装入Servlet。l ServletException异常异常12.2 Java Servlet API23计算机科学与技术系计算机科学与技术系2. service()方法方法l 可以被可以被同时、多次地呼叫同时、多次
19、地呼叫。l 每当一个客户请求一个每当一个客户请求一个Servlet 对象,该对象的对象,该对象的service() 方法就要被调用,而且传递给这个方法一个方法就要被调用,而且传递给这个方法一个“请求请求”(ServletRequest)对象和一个对象和一个“响响应应”(ServletResponse)对象作为参数。对象作为参数。l Servlet的响应可以是下列几种类型:的响应可以是下列几种类型:12.2 Java Servlet APIl一个输出流,浏览器根据它的内容类型一个输出流,浏览器根据它的内容类型(如如text/HTML)进行解释。进行解释。 l一个一个HTTP错误响应,重定向到另一
20、个错误响应,重定向到另一个URL、servlet、JSP。24计算机科学与技术系计算机科学与技术系3. destroy()方法方法l 仅执行一次仅执行一次,即在服务器停止且卸装,即在服务器停止且卸装Servlet 时执行该时执行该方法。方法。l 一个一个Servlet在运行在运行service()方法时可能会产生其他方法时可能会产生其他的线程,因此,请确认在调用的线程,因此,请确认在调用destroy()方法时,这些方法时,这些线程已终止或完成。线程已终止或完成。l 如果你需要在结束时,关闭一些资源,你也可以重载这如果你需要在结束时,关闭一些资源,你也可以重载这个方法。个方法。12.2 Jav
21、a Servlet API2512.2 Java Servlet API12.2.3 javax.servlet.Servlet接口接口计算机科学与技术系计算机科学与技术系l 当某个当某个Servlet第一次被请求时,服务器(第一次被请求时,服务器(Servlet容容器)会生成该器)会生成该Servlet并调用它的并调用它的init()方法,再调用方法,再调用其其service()方法处理请求。处理结束后该方法处理请求。处理结束后该Servlet会会常驻于容器中,下一个请求则不再重新生成常驻于容器中,下一个请求则不再重新生成Servlet,而是直接调用常驻的而是直接调用常驻的Servlet对象
22、的对象的service()方法。方法。服务器停止时,会调用该服务器停止时,会调用该Servlet的的destroy()方法。方法。 l 在在Servlet的一个生命周期中,的一个生命周期中,init()和和destroy()仅仅会被调用一次,而会被调用一次,而service()则会被调用多次。则会被调用多次。 2612.2 Java Servlet API12.2.4 ServletConfig接口接口l 初始化参数,是针对当前初始化参数,是针对当前Servlet的设置。的设置。l 提供一些获取提供一些获取Servlet的配置信息的方法。的配置信息的方法。l 配置信息包括初始化参数和一个配置信
23、息包括初始化参数和一个ServletContext对象。对象。l 初始化参数是一组初始化参数是一组“名称名称/值值”对。对。计算机科学与技术系计算机科学与技术系public ServletContext getServletContext() Servlet.getServletConfig(); public String getInitParameter(String name) 2712.2 Java Servlet API12.2.5 ServletContext接口接口l 上下文参数,是针对整个项目的全局设置上下文参数,是针对整个项目的全局设置l 提供一些访问提供一些访问Servle
24、t运行环境信息的方法。运行环境信息的方法。l ServletContext接口和接口和ServletConfig接口的设接口的设置内容都写在置内容都写在web.xml中。如数据库地址、用户名中。如数据库地址、用户名密码等。密码等。l 两者的参数值在两者的参数值在Servlet的生命周期中是不变的。的生命周期中是不变的。 计算机科学与技术系计算机科学与技术系public String getInitParameter(String name) 2812.2 Java Servlet API12.2.6 HttpServlet类类l javax.servlet.http.HttpServlet,抽
25、象类,抽象类计算机科学与技术系计算机科学与技术系l void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException /当浏览器用GET方式访问时,该方法被调用。 l void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException /当浏览器用POST方式访问时,该方法被调用。 2912.2 Java Servlet API12.2.6
26、HttpServlet类类l 其他的其他的HTTP请求也都有相应的方法:请求也都有相应的方法:l 一般不需要重写一般不需要重写service()方法。方法。Service方法将按照每一个方法将按照每一个标准的标准的HTTP请求的类型进行分发处理,调用相应的请求的类型进行分发处理,调用相应的do方法。方法。计算机科学与技术系计算机科学与技术系3010.3.1 编写一个基本编写一个基本HTTP Servlet的步骤:的步骤:12.2 Java Servlet APIdoGet()、doPost()、service()的区别的区别 3112.2 Java Servlet API12.2.7 Http
27、ServletRequest接口接口l javax.servlet.http.HttpServletRequest计算机科学与技术系计算机科学与技术系l 用于向用于向Servlet提供有关客户请求的信息。提供有关客户请求的信息。l 如由客户端传送的参数名称,客户端正在使用的协议,如由客户端传送的参数名称,客户端正在使用的协议,产生请求并且接收请求的服务器远端主机名。产生请求并且接收请求的服务器远端主机名。l public java.io.BufferedReader getReader() throws java.io.IOExceptionl public ServletInputStrea
28、m getInputStream() throws java.io.IOException 3212.2 Java Servlet API12.2.7 HttpServletRequest接口接口l 主要方法主要方法:计算机科学与技术系计算机科学与技术系l 用于向用于向Servlet提供有关客户请求的信息。提供有关客户请求的信息。l 如由客户端传送的参数名称,客户端正在使用的协议,如由客户端传送的参数名称,客户端正在使用的协议,产生请求并且接收请求的服务器远端主机名。产生请求并且接收请求的服务器远端主机名。lgetRequestURI()lgetProtocol()lgetAttribute(
29、String name)lgetAttributeNames()lgetRemoteAddr()3312.2 Java Servlet API12.2.8 HttpServletResponse接口接口l javax.servlet.http.HttpServletResponse计算机科学与技术系计算机科学与技术系l 定义一个定义一个HTTP Servlet响应,响应,HTTP Servlet指的指的是能处理是能处理HTTP协议规格的协议规格的Servlet,Web服务器必服务器必须用此规格来响应客户的请求。须用此规格来响应客户的请求。l public java.io.PrintWriter
30、 getWriter() throws java.io.IOException l public ServletOutputStream getOutputStream() throws java.io.IOException 3412.2 Java Servlet API12.2.8 HttpServletResponse接口接口l 主要方法:主要方法:计算机科学与技术系计算机科学与技术系l 定义一个定义一个HTTP Servlet响应,响应,HTTP Servlet指的指的是能处理是能处理HTTP协议规格的协议规格的Servlet,Web服务器必服务器必须用此规格来响应客户的请求。须用此规
31、格来响应客户的请求。l public java.io.PrintWriter getWriter() throws java.io.IOException l public ServletOutputStream getOutputStream() throws java.io.IOException lvoid setBufferSize(int nBytes)lint getBufferSize()lisCommitted()lreset()lsetContentType(java.lang.String type)lsetContentLength(int len)3512.3.1 如何
32、处理请求及响应如何处理请求及响应l Servlet实现中,正确处理请求并返回响应的过程实现中,正确处理请求并返回响应的过程:l 下面通过一些例子将描述如何从请求(下面通过一些例子将描述如何从请求(request)中)中获得信息和产生获得信息和产生HTTP响应(响应(response)。)。 12.3 Servlet编程编程l首先填写响应(首先填写响应(response)的头信息;)的头信息;l然后从响应对象(然后从响应对象(response)中得到输出流;)中得到输出流;l向输出流中写入内容信息。向输出流中写入内容信息。l最后关闭输出流。最后关闭输出流。注:响应(注:响应(response)头
33、信息必须最先设置。)头信息必须最先设置。计算机科学与技术系计算机科学与技术系3612.3.2获取客户请求信息获取客户请求信息l 例:从例:从HttpServletRequest得到并打印客户端信得到并打印客户端信息。息。 RequestInfo.java12.3 Servlet编程编程计算机科学与技术系计算机科学与技术系3710.3.2 如何处理如何处理HTTP POST/GET请求:请求:/RequestInfo.javaimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class Reque
34、stInfo extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException response.setContentType(“text/html”); /先设置先设置Header,在这里只设置,在这里只设置ContentType一项一项 PrintWriter out = response.getWriter(); /得到用于返回响应信息的输出流得到用于返回响应信息的输出流3810.3.2 如
35、何处理如何处理HTTP POST/GET请求:请求:/下面打印相关的下面打印相关的HTML out.println(); out.println(Request Information Example); out.println(); out.println(); out.println(Request Information Example); out.println(“Request URI: ”+ request.getRequestURI() +“”); /打印请求的路径打印请求的路径 out.println(“Protocol: ” + request.getProtocol() +
36、“”); /打印协议名称打印协议名称 out.println(“PathInfo: ” + request.getPathInfo() +“”); /打印额外的路径信息打印额外的路径信息 out.println(“Remote Address: ”+request.getRemoteAddr() ); /打印客户机的地址,如果没有则打印打印客户机的地址,如果没有则打印IP地地 out.println(); out.println(); out.close(); /关闭关闭Writer 3912.3.3 Cookie应用编程应用编程l 上下文无关的协议上下文无关的协议(或无状态协议或无状态协议)
37、:客户端向服务器发送客户端向服务器发送HTTP请求,服务器将根据客户的请求返回相应的响应信请求,服务器将根据客户的请求返回相应的响应信息,这样客户和服务器完成一次对话。如果要接着对话,息,这样客户和服务器完成一次对话。如果要接着对话,一切重新开始。一切重新开始。l Cookie技术技术把上次对话所需要的状态保存到客户一个固定把上次对话所需要的状态保存到客户一个固定的文件中(的文件中(Cookie)。当新一轮会话时,客户端向服务器)。当新一轮会话时,客户端向服务器发送的发送的HTTP请求消息首部包含了请求消息首部包含了Cookie文件中的内容文件中的内容。l 一一个个Cookie:是是web服务
38、器存放在用户硬盘的一段文本,服务器存放在用户硬盘的一段文本,允许一个允许一个web站点在用户的机器存放一些文本的信息,并站点在用户的机器存放一些文本的信息,并可以在以后重新获取它。这个基于文本的信息存储着一些可以在以后重新获取它。这个基于文本的信息存储着一些“键值键值”对。对。 12.3 Servlet编程编程计算机科学与技术系计算机科学与技术系4012.3.3 Cookie应用编程应用编程l 功能:帮助功能:帮助Web站点保存有关访问者的信息。站点保存有关访问者的信息。l 应用:电子商务网站、民意测验网站、要求用户登录的网应用:电子商务网站、民意测验网站、要求用户登录的网站等。站等。l 为了
39、保证安全,多数浏览器可设置是否使用为了保证安全,多数浏览器可设置是否使用Cookie。所。所以为了启用以为了启用Cookie程序,首先要程序,首先要设置客户浏览器设置客户浏览器 例:例:IE6.0:工具工具-internet选项选项-隐私隐私12.3 Servlet编程编程计算机科学与技术系计算机科学与技术系4112.3.4 Cookie应用编程应用编程l 工作原理:工作原理:12.3 Servlet编程编程计算机科学与技术系计算机科学与技术系4212.3.3 Cookie应用编程应用编程l javax.servlet.http.Cookie类类12.3 Servlet编程编程l 构造方法:构
40、造方法:Cookie(String name, String value);l 相关方法:相关方法:void response.addCookie(Cookie c);Cookie request.getCookies();4312.3.3 Cookie应用编程应用编程l 常用方法:常用方法:l 例例 1:Cookie1.java:向客户端写入两个向客户端写入两个 cookie 例例2:Cookie2.java:读取客户请求消息中的读取客户请求消息中的cookie内容,并重新设置内容,并重新设置cookie1的值。的值。12.3 Servlet编程编程void setMaxAge(int ti
41、meage); int getMaxAge();void setValue(String newValue);String getName(); /返回该返回该Cookie的名字的名字String getValue(); /返回该返回该Cookie的值的值44package ch12;import java.io.*;import javax.servlet. *;import javax.servlet.http.*;public class Cookie1 extends HttpServlet public void service (HttpServletRequest request
42、,HttpServletResponse response) throws ServletException ,IOException Cookie c1=new Cookie (Cookie1,javacat); c1.setMaxAge(60); /写入写入theCookie到客户端规定的文件中到客户端规定的文件中 response.addCookie (c1); Cookie c2=new Cookie (Cookie2,redkey); c2.setMaxAge(100*60); /写入写入theCookie到客户端规定的文件中到客户端规定的文件中 response.addCookie
43、 (c); PrintWriter out=response.getWriter(); out.print(the first cookie); out.print(+we have written the cookies into the IE); out.print (); out.close (); 45package ch12;import java.io.*;import javax.servlet. *;import javax.servlet.http.*;public class Cookie2 extends HttpServlet public void service (
44、HttpServletRequest request,HttpServletResponse response) throws ServletException ,IOException Cookie c; Cookie x=request.getCookies(); response.setContentType(text/html); PrintWriter out=response.getWriter(); for(int i=0;ix.length;i+) String v=xi.getValue(); String n=xi.getName(); out.println(x.leng
45、th=+x.length);out.println(cookiename+n+cookievalue+v+Age=+xi.getMaxAge()+); if(n.equals(Cookie1) v+=-fengbo; c=new Cookie(Cookie1,v); response.addCookie(c); out.close (); 4612.3.4 Session应用编程应用编程12.3 Servlet编程编程l javax.servlet.http.HttpSession接口接口l 实现会话跟踪。实现会话跟踪。l HttpSession实例由实例由Servlet/JSP容器来维护,容
46、器来维护,针对每个连接的用户会生成唯一针对每个连接的用户会生成唯一HttpSession实例,实例,此此HttpSession实例代表相应的用户,可在同一个实例代表相应的用户,可在同一个Web应用中被所有应用中被所有Servlet访问。访问。计算机科学与技术系计算机科学与技术系4712.3.4 Session应用编程应用编程12.3 Servlet编程编程l 相关方法:相关方法:HttpSession getSession(boolean create);HttpSession getSession();/*HttpServletRequest接口中定义的接口中定义的getSession方法方
47、法 *该方法可获得当前用户的正在使用的会话,此会话类型为该方法可获得当前用户的正在使用的会话,此会话类型为HttpSession类。类。 *如果当前用户没有对应的如果当前用户没有对应的HttpSession对象,当对象,当create参数为参数为true时,该方法会自动创建一个新的时,该方法会自动创建一个新的HttpSesion对对象。象。*/计算机科学与技术系计算机科学与技术系48计算机科学与技术系计算机科学与技术系12.3.4 Session应用编程应用编程12.3 Servlet编程编程l 相关方法:相关方法:lvoid setAttribute(String key, Object v
48、alue);lObject getAttribute(String key);lvoid removeAttribute(String key);lvoid invalidate();lString getID();lboolean isNew(); lEnumeration getAttributeNames() lint getMaxInactiveInterval()lvoid setMaxInactiveInterval(int interval) 4912.3.4 Session应用编程应用编程l Session的应用购物车的应用购物车 例如把购物车作为属性存储在例如把购物车作为属性
49、存储在session中,在其他中,在其他Servlet中可以通过中可以通过session再获得购物车。付款完成,再获得购物车。付款完成,使使session无效。无效。12.3 Servlet编程编程/得到用户得到用户session和购物篮和购物篮HttpSession session = request.getSession(true);ShoppingCart cart = (ShoppingCart)session.getAttribute(cart); /付款完成,使付款完成,使session无效无效session.invalidate();使得会话被终止,释放其中的任意对象50计算机科
50、学与技术系计算机科学与技术系12.4.1 监听监听Servletl Servlet按请求的处理方式不同分为:按请求的处理方式不同分为: 标准标准Servlet、过滤、过滤Servlet、监听、监听Servlet。l 监听监听Servlet的主要作用:监听的主要作用:监听Servlet生命周期中生命周期中产生的事件并对其作出反应。可以监听客户端的请求、产生的事件并对其作出反应。可以监听客户端的请求、服务端的操作等。服务端的操作等。l 按用途不同,选择实现下列监听接口之一:按用途不同,选择实现下列监听接口之一:12.4 Servlet应用实例应用实例51计算机科学与技术系计算机科学与技术系12.4
51、.1 监听监听Servletl 常用的监听接口有以下几个(按用途不同):常用的监听接口有以下几个(按用途不同):12.4 Servlet应用实例应用实例lServletContextListenerlServletContextAttributeListenerlHttpSessionListenerlHttpSessionAttributeListenerlServletRequestListener lServletRequestAttributeListener 52计算机科学与技术系计算机科学与技术系12.4.1 监听监听Servlet12.4 Servlet应用实例应用实例1. Se
52、rvletContextListenerl监听监听ServletContext的创建和销毁。的创建和销毁。l当创建当创建ServletContext时,激发时,激发l当销毁当销毁ServletContext时,激发时,激发contextInitialized(ServletContextEvent sce);contextDestroyed(ServletContextEvent sce);5312.4.1 监听监听Servlet12.4 Servlet应用实例应用实例2. HttpSessionListenerl监听监听HttpSession的操作。的操作。l当创建一个当创建一个Sessio
53、n时,激发时,激发sessionCreated(HttpSessionEvent se);l当销毁一个当销毁一个Session时,激发时,激发sessionDestroyed(HttpSessionEvent se);计算机科学与技术系计算机科学与技术系5412.4.1 监听监听Servlet12.4 Servlet应用实例应用实例3. HttpSessionAttributeListenerl监听监听HttpSession中的属性的操作。中的属性的操作。l当在当在Session增加一个属性时,激发方法增加一个属性时,激发方法l当在当在Session删除一个属性时,激发方法删除一个属性时,激发
54、方法l当在当在Session属性被重新设置时,激发方法属性被重新设置时,激发方法attributeAdded(HttpSessionBindingEvent se);attributeRemoved(HttpSessionBindingEvent se);attributeReplaced(HttpSessionBindingEvent se);计算机科学与技术系计算机科学与技术系55计算机科学与技术系计算机科学与技术系12.4.1 监听监听Servletl 通过监听器,可以自动激发一些操作,比如通过监听器,可以自动激发一些操作,比如监听在线监听在线的用户的数量的用户的数量。当增加一个。当增加
55、一个HttpSession时,就激时,就激发发sessionCreated(HttpSessionEvent se)方方法,这样就可以给在线人数加法,这样就可以给在线人数加1。l 示例:示例: SessionListener.java Servletl.java12.4 Servlet应用实例应用实例56package count;import java.util.*;import javax.servlet.http.*;public class SessionListener implements HttpSessionListener /会话统计变量会话统计变量count protect
56、ed static int count = 0; /session创建时触发该方法。创建时触发该方法。 public void sessionCreated(HttpSessionEvent event) count+; /session过期或销毁触发该方法过期或销毁触发该方法 public void sessionDestroyed(HttpSessionEvent event) if(count0) count-;/返回在线人数返回在线人数public static int getCount() return count;57package count;import javax.servl
57、et.*;import javax.servlet.http.*;import java.io.*;import java.util.*;public class Servletl extends HttpServlet static final private String CONTENT_TYPE = text/html; charset=GBK; /处理处理 HTTP Get 请求请求public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IO
58、Exception response.setContentType(CONTENT_TYPE); HttpSession session=request.getSession(true); PrintWriter out = response.getWriter(); out.println(); out.println(Servlet1); out.println(); out.println(在线人数在线人数+ SessionListener.getCount()+); out.println(); /撤消撤消Servlet线程,回收资源线程,回收资源 public void destro
59、y() 58计算机科学与技术系计算机科学与技术系12.4.2 过滤过滤Servletl 必须实现必须实现 javax.servlet.Filter接口接口l 是截获并处理客户的请求以及服务器的响应是截获并处理客户的请求以及服务器的响应 。12.4 Servlet应用实例应用实例5912.4.2 过滤过滤Servletl javax.servlet.Filter接口接口l 三个方法:三个方法:12.4 Servlet应用实例应用实例计算机科学与技术系计算机科学与技术系lvoid doFilter(ServletRequest, ServletResponse, FilterChain) thro
60、ws IOExceptionlvoid init(FilterConfig)lvoid destroy()60计算机科学与技术系计算机科学与技术系12.4.2 过滤过滤Servletl FilterChain,一个应用程序内的,一个应用程序内的Filter可以有多个,它可以有多个,它们像链子一样串在一起,其中的某个们像链子一样串在一起,其中的某个Filter执行之后,可执行之后,可以调用以调用chain.doFilter(request, response)将执行将执行权转给下一个权转给下一个Filter,直到所有的,直到所有的Filter都执行完毕。都执行完毕。l 举个例子,某个网站里有提交
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022年个人年度工作计划
- 社区年度工作计划大全8篇
- 普通员工辞职申请书合集5篇
- 2024年度镍矿贸易代理佣金合同范本3篇
- 2024年度汽车品牌授权销售代理合同3篇
- 家具活动销售工作总结
- 关于大一新生对大学四年规划的调查报告
- 《大自然的文字》教学课件 张建昊
- 《TA教学助理》课件
- 《工作态度与心态》课件
- 应用PDCA提高入院宣教的知晓率
- 医疗质量(安全)不良事件报告制度
- 清热泻火药-黄芩、黄连、黄柏(方剂学课件)
- 【老年糖尿病患者夜间易发低血糖的原因及预防措施分析报告(论文)4600字】
- 居家养老服务组织(社区居家养老服务课件)
- 消防安全重点单位规范化管理手册
- 【拓展阅读】类文阅读《王羲之吃墨》
- 国家开放大学《高等数学基础》形考任务1-4参考答案
- 食品营养学(华东理工大学)智慧树知到答案章节测试2023年
- 液压升降机设计02
- 油墨检验报告表
评论
0/150
提交评论