1 / 102

第 7 章 Servlet 技术

第 7 章 Servlet 技术. 7.1Servlet 介绍 7.2Servlet 常用接口的使用 7.3 使用 HttpServlet 处理客户端请求 7.4 获得 Servlet 初始化参数 7.5Servlet 的配置 7.6 用 Servlet 生成动态图片. 7.1servlet 介绍. Servlet 已经出现了很长一段时间,它先于 J2EE 平台出现。在过去的一段时间内, Servlet 曾经得到广泛的应用,如今它在 J2EE 项目开发中仍然广泛使用。 JSP 基于 Servlet 技术构架,可见 Servlet 功能的强大。.

kieran-west
Download Presentation

第 7 章 Servlet 技术

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第7章 Servlet技术 • 7.1Servlet介绍 • 7.2Servlet常用接口的使用 • 7.3使用HttpServlet处理客户端请求 • 7.4获得Servlet初始化参数 • 7.5Servlet的配置 • 7.6用Servlet生成动态图片

  2. 7.1servlet介绍 Servlet已经出现了很长一段时间,它先于J2EE平台出现。在过去的一段时间内,Servlet曾经得到广泛的应用,如今它在J2EE项目开发中仍然广泛使用。JSP基于Servlet技术构架,可见Servlet功能的强大。

  3. 7.1.1什么是Servlet Servlet(Java 服务器小程序)是用Java编写的服务器程序,是由服务器调用和执行的,按照Servlet自身规范编写的Java类。 Servlet是使用Java Servlet应用程序设计接口(API)及相关类和方法的Java程序。除了Java Servlet API,Servlet还可以使用用于扩展和添加到API的Java类软件包。 Servlet本身就是Java语言的一个应用,具有Java语言的所有优势,能完成普通Java程序所能完成的所有功能。

  4. Servlet概念 • Servlet是一个标准的Java类,它符合Java类的一般规则。和一般Java类不同之处就在于Servlet可以处理HTTP请求。在Servlet API中提供了大量的方法,可以在Servlet中调用。它是用Java语言的ServletAPI来编写的特殊的Java类。 • 当把这些Java类的的字节码文件(也称为二进制文件,.class文件)放到Servlet容器(比如:tomcat)的相应目录中时,它们就可以接受客户端响应了。Servlet的优点很多,它是一种流行的BS结构编程技术,是JSP编程技术的核心。 • JSP是以另外一种方式实现的Servlet,Servlet是JSP的早期版本,在JSP中,更加注重页面的表现,而在Servlet中则更注重业务逻辑的实现。因此,当编写的页面显示效果比较复杂时,首选是JSP。或者在开发过程中,HTML代码经常发生变化,而Java代码则相对比较固定时,可以选择JSP。而我们在处理业务逻辑时,首选则是Servlet。同时,JSP只能处理浏览器的请求,而Servlet则可以处理一个客户端的应用程序请求。因此,Servlet加强了Web服务器的功能。

  5. 7.1.2.Servlet技术的特点 Servlet带给开发人员最大的好处是它可以处理客户端传来的HTTP请求,并返回一个响应。Servlet是一个Java的类,Java语言能够实现的功能,Servlet基本上都能实现(除了图形界面外)。 Servlet是服务器端的Java小程序。用于响应客户机的请求。在默认情况下,Servlet采用一种无状态的请求-响应处理方式。Servlet代码的主要作用是为了增强Java服务器端功能。

  6.  Servlet的特点 Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。 Servlet引擎是一种容器程序,它负责管理和维护所有Servlet对象的生命周期。Servlet的加载、执行流程、以及如何接收客户端发送的数据和如何将数据传输到客户端等具体的底层事务,都是由Servlet引擎来实现的。Servlet引擎负责将客户端的请求信息转交给Servlet和将Servlet生成的响应信息返回给客户端。 Servlet属于一种插件,它是一个提供了一些约定方法供容器去调用的类,它只负责在自身的方法中接受并处理容器传递进来的数据,以及生成并返回给容器去使用的数据和状态信息。

  7. Servlet的最常见应用在于: 读取WEB浏览器传递给WEB服务器的参数; 生成WEB服务器返回给WEB浏览器的动态网页文档内容; Serlvet也能获取WEB浏览器发送的HTTP请求消息中的各个请求头和请求行信息; 以及生成用于WEB服务器发送的HTTP响应消息中的状态行和响应头信息; Serlvet还能获取WEB服务器和Servlet引擎自身的一些环境和状态信息。

  8. Servlet程序的运行过程就是它与Servlet引擎的交互过程,Servlet程序只与Servlet引擎打交道,它并不与Web服务器和客户端进行任何直接的交互。 Servlet程序的运行过程就是它与Servlet引擎的交互过程,Servlet程序只与Servlet引擎打交道,它并不与Web服务器和客户端进行任何直接的交互。  Web服务器上可以布置多个功能各不相同的Servlet,每个Servlet 都应宣称它可以处理何种样式的URL,当符合样式的URL请求到达时,Servlet引擎调用相应的Servlet进行处理。

  9. Servlet的优势 a. 可移植 因为Servlet由Java开发并符合规范定义和广泛接收的API,它可以再不同的操作系统平台和不同的应用服务器平台下移植。 b. 功能强大 Servlet可以使用Java API核心的所有功能,这些功能包括Web和URL访问、图像处理、数据压缩、多线程、JDBC、RMI和序列化对象等。 c. 安全 有几个不同层次为Servlet的安全提供了保障。 首先,它是Java编写的,所以它可以使用Java的安全框架; 其次,ServletAPI被实现为类型安全的; 另外容器也会对Servlet的安全进行管理。 在Servlet安全策略中,可以使用编程的安全也可以使用声明性的安全,声明性的安全由容器进行统一管理

  10. d. 简洁 Servlet代码面向对象,在封装方面具有先天的优势。 e. 集成 Servlet和服务器紧密集成,它们可以密切合作完成特定的任务。 f. 模块化 每一个Servlet可以执行一个特定任务,并且可以将他们并在一起工作。Servlet之间是可以相互交流的 g. 扩展性和灵活性 Servlet本身的接口设计得非常精简,使得它有很强的扩展性。需要指出的是,Servlet不等于HttpServlet,后者是前者的一个常见扩展。 h. 高效耐久 Servlet一旦载入,它就驻留在内存中,这样加快了响应的速度。在服务器上仅有一个Java虚拟机在运行,它的优势在于,当Servlet被客户端发送的第一个请示激活,以后它将继续运行于后台,等待以后的请求。每个请求将生成一个线程而不是进程。

  11. 7.1.3Servlet的生命周期 Servlet部署在容器里,它的生命周期由容器管理。 Servlet的生命周期概括为以下几个阶段: 1. 装载Servlet这项操作一般是动态执行的。有些服务提供了相应的管理功能,可以再启动的时候就装载Servlet,并能够初始化特定的Servlet。 2. 创建一个Servlet实例 3. 调用Servlet的init()方法 4. 服务 如果容器接收到对此Servlet的请求,那么它调用Servlet的service()方法 5. 销毁 实例被销毁,通过调用Servlet的destory()方法销毁Servlet。 在这几个阶段中,对外提供服务是最要的阶段,service()方法是最关心的方法,因为它才是真正处理业务的方法。

  12. Java Servlet的实现方法步骤: 1,编写Servlet文件:创建一个继承自javax.servlet.http.HttpServlet的Java类 ; 2,部署Servlet文件:在web.xml里定义; 3,编译Servlet文件; 4,访问Servlet文件:启动WEB服务器。通过浏览器访问。

  13. 7.1.4开发、部署一个简单的Servlet 例程7-1 入门的Servlet Package com.jspdev.ch7 Import java.io.*; Import javax.servlet.*; Import javax.servlet.http.*; Public class HelloWorldServlet extends HttpServlet{ Public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{ response.setContentType("text/html;charset=gb2312"); PrintWriter out=response.getWriter(); 包javax.servlet和javax.servlet.http提供了servlet接口和类。所有的servlet都必须实现servlet接口,它定义了生命周期方法。

  14. out.println("<html>"); out.println("<head>"); out.println("<title>HelloWorld</title>"); out.println("</head>"); out.println("<body bgcolor=\"white\">"); out.println("<hr>"); out.println("Hello World!"); out.println("</body></html>"); } Public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{ doGet(request,response); } }

  15.   这个Servlet直接继承HttpServlet,HttpServlet封装了编写基于HTTP协议的Servlet的大部分功能。HelloWorldServlet中有两个方法:一个是doGet,它处理HTTP GET请求;另一个是doPost,它处理HTTP POST请求。在这里doGet和doPost基本上一样的处理。不同之处在于doGet会把用户的输入显示在URL中,doPost比doGet的安全性强一点。首先对于客户端它是不可见的,另外服务器日志上会记录所有经过URL而Post出去的资料的内容。   在doGet方法中,首先设置响应的MIME类型和编码方式,然后获得输出流对象。这个输出流对象用out表示,这个out对象和JSP中内建对象out是一样的,通过它可以把输出发送到客户端。

  16. 接下来就看看怎么部署。找到WEB-INF\web.xml。添加如下内容 例程7-2 添加的内容 <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>Welcome to Tomcat</display-name> 对站台做出描述. <description>ServletHelloWorld实例</description> 定义站台的名称. <Servlet> <servlet-name>HelloWorldServlet</servlet-name> <servlet-class>com.jspdev.ch7.HelloWorldServlet </servlet-class> </Servlet> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app> 在上述内容中,首先声明Servlet,指定这个Servlet的名字和类,然后在后面为这个Servlet做URI映射。

  17. Servlet的注册与运行 1.Servlet程序必须通过Servlet引擎来启动运行,并且储存目录有特殊要求,通常需要存储在<WEB应用程序目录>\WEB-INF\classes\目录中。如果这个Servlet程序有包名,那么在这个目录下面还要有包名对应的目录结构。 2.Servlet程序必须在WEB应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问。 3.一个<servlet>元素用于注册一个Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名(包括包名)。 4.一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径。

  18. <web-app> ...... <servlet> <servlet-name>AnyName</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> ...... <servlet-mapping> <servlet-name>AnyName</servlet-name>     第一个“/”表示<WEB应用程序目录> <url-pattern>/demo/hello.html</url-pattern> </servlet-mapping> ...... </web-app> 这个<servlet>和<servlet-mapping>中的两个是对应的。两个<servlet-name>必须相同。当用户访问/demo/hello.html的时候,就会去调用HelloServlet这个Servlet程序,同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。

  19. 指定Servlet的名字,这个名字在同一个Web应用程序中必须是唯一的。指定Servlet的名字,这个名字在同一个Web应用程序中必须是唯一的。 指定Servlet类的完整限定名。

  20. 7.2Servlet常用接口的使用 Servlet的类接口可以从以下几个方面进行分类 1. Servlet实现相关 定义了用于实现Servlet相关的类和方法 2. Servlet配置相关 主要包括ServletConfig接口 3. Servlet异常相关 Servlet API定义了两个异常,它们是ServletException和UnavailableException 4. 请求和响应相关 用于接收客户端的请求,并且做出对应的响应。 5. 会话跟踪 用于跟踪和客户端的会话 6. Servlet上下文 通过这个接口,可以再多个Web应用程序中共享数据 7. Servlet协作 主要是RequestDispatcher接口,用于进行视图派发 ,即把一个请求转发到另一个Servlet。 8. 过滤 定义了请求响应过滤的相关API和接口 9. 其他类 Cookie和HttpUtils类

  21. 7.2.1Servlet实现相关 1.Servlet 声明:public interface Servlet 这个接口是所有Servlet必须直接或者间接实现的接口。它定义了以下的方法 a. init(ServletConfig config) 用于初始化Servlet b. destory() 销毁Servlet c. getServletInfo() 获得Servlet的信息 d. getServletConfig() 获得Servlet配置相关信息 e. service(ServletRequest request,ServeltResponse response) 运行应用程序逻辑的入口点。它接收两个参数,ServletRequest表示客户端请求的信息,ServletResponse表示对客户端的响应。

  22. 2. GenericServlet 声明: public abstract class GenericServlet implements Servlet,ServletConfig,java.io.Serializable GenericServlet提供了对Servlet接口的基本实现。它是一个抽象类,它的service()方法是一个抽象方法,GenericServlet的派生类必须直接或者间接实现这个方法。

  23. 3. HttpServlet 声明: public abstract class HttpServlet extends GenericServlet implements java.io.Serializable HttpServlet类是针对使用HTTP协议的Web服务器的Servlet类。HttpServlet类通过执行Servlet接口,能够提供HTTP协议的功能。

  24. HttpServlet的子类必须实现以下方法中的一个 * doGet 如果Servlet支持HTTP GET请求,用于HTTP GET请求 * doPost 如果Servlet支持HTTP GET请求,用于HTTP POST请求 * doPut 如果Servlet支持HTTP GET请求,用于HTTP PUT请求 * doDelete 如果Servlet支持HTTP GET请求,用于HTTP DELETE请求 * init和destroy 管理Servlet占用的资源。如果需要管理Servlet生命周期内所持有资源可以重载这两个方法 * getServletInfo 获得Servlet自身的信息

  25. 7.2.2Servlet配置相关 javax.servlet.ServletConfig接口代表了Servlet的配置,Servlet配置包括Servlet的名字、Servlet的初始化参数和Servlet上下文。 例程7-3 Servlet的配置 <servlet> <servlet-name>HelloWorldServlet</servlet-name> <servlet-class>HelloWorldExample<servlet-class> <init-param> <param-name>encoding</param-name> <param-value>gb2312</param-value> </init-param> </servlet>

  26. 定义Servlet的初始化参数。如果使用了<init-param>元素,则必须包含<param-name>和<param-value>元素,可以包含零个或多个<description>元素。定义Servlet的初始化参数。如果使用了<init-param>元素,则必须包含<param-name>和<param-value>元素,可以包含零个或多个<description>元素。 为初始化参数提供一个文本描述。 定义初始化参数的名字。 定义初始化参数的值。

  27. ServletConfig 声明:public interface ServletConfig 这个接口的主要方法有以下几个 * getInitParameter(String name) 返回特定名字的初始化参数。 例如:HelloWorldExample 中如果有getInitParameter("encoding"),那么将返回"gb2312"字符串 * getInitParameterNames() 返回所有的初始化参数的名字 * getServletContext() 返回Servlet的上下文对象的引用

  28. 7.2.3Servlet异常相关 1、ServletException 声明: public class ServletException extends Exception 它包含几个构造方法和一个获得异常原因的方法,这个方法如下。 * getRootCause() 返回造成这个ServletException的原因 2、UnavailableException 声明: public class UnavailableException extends ServletException 当Servlet或者Filter暂时或者永久不能使用时,就会抛出这个异常。

  29. 7.2.4 Servlet请求和响应 和请求响应相关的类和接口非常多,主要有: 1. ServletRequest 代表了Servlet的请求。它是一个高层的接口,HttpServletRequest是它的子接口。 2. ServletResponse 代表了Servlet的响应。它是一个高层的接口,HttpServletResponse是它的子接口 3. ServletInputStream Servlet的输入流 4. ServletOutputStream Servlet的输出流 5. ServletRequestWrapper它是ServletResquest的实现 6. ServletResponseWrapper它是ServletResponse的实现 7. HttpServletRequest 代表了HTTP的请求,继承了ServletRequest接口 8. HttpServletResponse 代表了HTTP的响应,继承了ServletResponse接口 9. HttpServletRequestWrapper HttpServletRequest的实现 10.HttpServletResponseWrapper HttpServletResponse的实现

  30. 下面主要看看HttpServletRequest和HttpServletResponse这两个接口 :1. HttpServletRequest 声明: public interface HttpServletRequest extends ServletRequest   这个接口中最常用的方法就是获得请求中的参数,这个请求中的参数是客户端表单中的数据。HttpServletRequest接口可以获取由客户端传送的阐述名称,也可以获取客户端正在使用的通信协议,可以获取产生请求并且接收请求的服务器远端主机和其IP地址等一些信息 。HttpServletRequest接口提供获取数据流的Servlet、ServletInputStream方法,这些数据是客户端引用HTTP Post和Put方法递交的。一个ServletRequest的子类可以让Servlet获得更多的协议特性数据。例如:HttpServletRequest包含获取头部信息的方法有request.getMethod()、request.getProtocol()、request.getPathInfo()等

  31. JSP中的内建对象request是一个HttpServletRequest实例,如下一些重要方法 : 1.getCookies() 获的客户端发送的Cookie。返回一个数组,该数组包含这个请求中当前所有Cookie。如果这个请求中没有Cookie,返回一个空数组 2.getSession()返回和客户端关联的Session。如果没有给客户端分配Session,返回null 3.getSession(boolean create) 和上一个方法类似,不同的是,如果没有给客户端分配Session,则创建一个新的Session并返回。 4. getParameter(java.lang.String name)返回请求中名为name的参数值。这个值往往是checkbox或者select控件提交的,获得的值是一个String数组。

  32. 2.HttpServletResponse 声明: public interface HttpServletResponse extends ServletResponse   它代表了对客户端的HTTP响应。HttpServletResponse接口给出相应的客户端的Servlet方法。它允许Servlet设置内容长度和回应MIME类型,并且提供输出流 ServletOutputStream。常用的方法有: 1. addCookie(Cookie cookie) 在响应中增加一个Cookie 2. encodeURL(java.lang.String.url)使用URL和SessionId重写这个URL 3. sendRedirect(java.lang.String location)把响应发送到另一个页面或者Servlet进行处理 4. setContentType(java.lang.String.type)设置响应的MIME类型 5. setCharacterEncoding(java.lang.String charset)设置响应的字符编码类型 。

  33. 7.2.5Servlet会话跟踪 和会话跟踪相关的类和接口有:HttpSession HttpSession 声明: public interface HttpSession   这个接口被Servlet引擎用来实现HTTP客户端和HTTP会话两者之间的关联。这种关联可能在多处连接和请求中持续一段给定的时间。Session用来在无状态的HTTP协议下越过多个请求页面来维持状态和识别用户。   一个Session可以通过Cookie或重写URL来维持。

  34. 它的常用方法有以下几种。 1. getCreateTimes() 返回创建Session的时间 2. getId() 返回分配给这个Session的标识符。一个HTTP Session的标志符是一个由服务器来建立和维护的唯一的字符串 3. getLastAccessedTime() 返回客户端最后一次发出与这个Session有关的请求的时间,如果这个Session是新建立的返回-1 4. getMaxInactiveInterval() 返回一个秒数,这个秒数表示客户端在不发出请求时,Session被Servlet引擎维持的最长时间。在这个时间之后,Session可能被Servlet引擎终止。如果这个Session不会被终止,这个方法返回-1.

  35. 5. getValue(String name)返回一个以给定的名字绑定在Session上的对象。如果不存在这样的绑定,返回空值 6. getValueNames()以一个数组返回绑定到Session上的所有数据的名称。 7. invalidate();public void invalidate() 这个方法终止这个Session,所有绑定在这个Session上的数据都会被清除。 8. isNew() 返回一个布尔值以判断这个Session是不是新的。如果一个Session已经被服务器建立但是还没有收到相应的客户端的请求,这个Session将被认为是新的。这意味着,这个客户端还没有加入会话或没有被会话公认。在它发出下一个请求时还不能返回适当的Session认证信息。当Session无效后,再调用这个方法会抛出一个IllegalStateException。

  36. 9. putValue(String name ,Object value)以给定的名字绑定给定的对象到Session中。已存在的同名的绑定会被重置,这时会调用HttpSessionBindingListener接口的valueBound方法 10. removeValue(String name) 取消给定名字的对象在Session上的绑定。如果未找到给定名字绑定的对象,这个方法什么也不做。这时则会调用HttpSessionBindingListener接口的valueUnbound方法 11. setMaxInactiveInterval(Int interval)设置一个秒数,这个秒数表示客户端在不发出请求时,Session被Servlet引擎维持的最长时间。

  37. 7.2.6Servlet 上下文   和Servlet上下位相关的接口有ServletContext ServletContext 声明: public interface ServletContext   在服务器上使用Session对象维持与单个客户相关的状态,而当为多个用户Web应用维持一个状态时,则应使用Servlet环境(Context) 。 ServletContext对象表示一组Servlet共享的资源。在Servlet API的1.0和2.0的版本中ServletContext对象仅仅提供了访问有关Servlet环境信息的方法。 例如:提供了访问服务器名称MIME类型映射等方法和可以将信息写入服务器日志文件的log()方法,大部分实现程序都会为一台主机中的所有Servlet或每一个虚拟机主机提供一个Servlet环境。

  38. 它常用的方法有: 1.getAttribute(String name) 获得ServletContext中名称为name的属性 2.getContext(String uripath) 返回给定的uripath的应用的Servlet上下文,如ServletContext test=getContext("/test"); 3. removeAttribute(String name) 删除名称为name属性 4. setAttribute(String name,Object object)在ServletContext中设置一个属性,这个属性的名字为name,值为object对象。

  39. 7.2.7 Servlet协作 Servlet协作主要是RequestDispatcher接口,RequestDispatcher是一个Web资源的包装器,它可以把一个请求转发到另一个Servlet。可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中。 RequestDispathcer 声明: public interface RequestDispatcher

  40. 使用:  getRequestDispatcher(path) String path="/index.jsp";//这是当前应用中一个绝对路径的url    servlet: RequestDispatcher dispatcher=getServletContext().getRequestDispatcher(path);  jsp: RequestDispatcher dispatcher=application.getRequestDispatcher(path);

  41. 它包含两个方法: 1. forword(ServletRequest request,ServletResponse response)把请求转发到服务器上的另一个资源(Servlet,JSP,HTML) 2. include(ServletRequest request,ServletResponse response)把服务器上的另一个资源(Servlet、JSP、HTML)包含到响应中。 dispatcher.forward();//转到path这个页面(不可以在这之前或之后有其它输出) dispatcher.include();//向浏览器输出path这个页面的执行结果(可以在这之前或之后有其它输出)

  42. 1、ServletRequest.getRequestDispatcher(String path) path可是绝对路径也可以是相对路径 2、ServletContext.getRequestDispatcher(String path) path必须以“/”开头,代表context root 3、另一个方法 ServletContext.getNameDispatcher(String name) 参数并不是路径,而是其名称,如果有多个Servlet名称一样的,在web.xml进行配置区别 。 以上方法回传一个RequestDispatcher对象,接着forward()或include()

  43. forward()和include()区别: include()方法将HTTP请求转送给其他Servlet或jsp后,这个Servlet或jsp虽然可以处理请求,但是主导权还是原来的Servlet或jsp,就是被调用的Servlet或jsp如果产生任何HTTP回应,将会并入原来的HttpResponse对象

  44. 7.2.8过滤   在web应用中实施过滤是我们常使用的技术。通过过滤,可以对请求进行统一编码、对请求进行认证等。每个Filter可能只担任很少的任务,多个Filter可以互相协作,通过这种协作,可以完成一个复杂的功能。 1. Filter 声明: public interface Filter 它是Filter必须实现的接口,包括: • init(FilterConfig filterConfig) 这个方法初始化Filter • doFilter(ServletRequest request,ServletResponse response,FilterChain chain)Filter的业务方法就是这里实现。 • destroy() 释放Filter占用的资源

  45. 2.FilterChain 声明: public interface FilterChain 它是代码的过滤链,通过这个接口把过滤的任务在不同的Filter之间转换。 它包含了一个方法: doFilter(ServletRequest request、ServletResponse response) 通过这个方法来调用下一个Filter。如果没有下一个Filter,那么将调用目标的资源 。

  46. 3.FilterConfig 声明: public interface FilterConfig 它代表了Filter的配置。和Servlet一样,Filter也有一些配置信息,比如Filter的名字和初始化参数等 。它包含了以下方法 : 1. getFilterName() 返回Filter的名字 2. getInitPatameter(String name) 获得名称为name的初始参数 3.getServletContext() 返回这个Filter所在的Servlet上下文对象 4. getInitParameterNames() 获得Filter配置中的所有初始化参数的名字。

  47. 访问方式: • 在JSP程序中,Servlet作为一个Java类可以有多种方式访问。 • 直接在地址栏中通过URL访问; • HelloWorldServlet.java • web.xml • 通过JSP程序提交表单访问; • LoginServlet.java • Login.jsp • web.xml • 通过超级链接访问 。 • DoRequest.java • xian.jsp • web.xml

  48. 通过JSP程序提交表单访问 LoginServlet.java package test; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class LoginServlet extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); } public void destroy(){}

More Related