所在的位置: Web开发 >> HTTP >> Java中FilterServlet

Java中FilterServlet

1、Filter的功能filter功能,它使用户可以改变一个request和修改一个response.Filter不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开servlet时处理response.换种说法,filter其实是一个”servletchaining”(servlet链).

一个Filter包括:

1)、在servlet被调用之前截获;

2)、在servlet被调用之前检查servletrequest;

3)、根据需要修改request头和request数据;

4)、根据需要修改response头和response数据;

5)、在servlet被调用之后截获.

服务器每次只调用setFilterConfig方法一次准备filter的处理;调用doFilter方法多次以处理不同的请求.FilterConfig接口有方法可以找到filter名字及初始化参数信息.服务器可以设置FilterConfig为空来指明filter已经终结。

每一个filter从doFilter()方法中得到当前的request及response.在这个方法里,可以进行任何的针对request及response的操作.(包括收集数据,包装数据等).filter调用chain.doFilter()方法把控制权交给下一个filter.一个filter在doFilter()方法中结束.如果一个filter想停止request处理而获得对response的完全的控制,那它可以不调用下一个filter

例子:

首先新建一个Filter

[java]viewplaincopy

/**

*

*/

package   Servlet是使用JavaServlet应用程序设计接口(API)及相关类和方法的Java程序。除了JavaServletAPI,Servlet还可以使用用以扩展和添加到API的Java类软件包。Servlet在启用Java的Web服务器上或应用服务器上运行并扩展了该服务器的能力。Javaservlet对于Web服务器就好象Javaapplet对于Web浏览器。Servlet装入Web服务器并在Web服务器内执行,而applet装入Web浏览器并在Web浏览器内执行。JavaServletAPI定义了一个servlet和Java使能的服务器之间的一个标准接口,这使得Servlets具有跨服务器平台的特性。   Servlet通过创建一个框架来扩展服务器的能力,以提供在Web上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给Servlet,并让Servlet建立起服务器返回给客户机的响应。当启动Web服务器或客户机第一次请求服务时,可以自动装入Servlet。装入后,Servlet继续运行直到其它客户机发出请求。Servlet的功能涉及范围很广。例如,Servlet可完成如下功能:   (1)创建并返回一个包含基于客户请求性质的动态内容的完整的HTML页面。   (2)创建可嵌入到现有HTML页面中的一部分HTML页面(HTML片段)。   (3)与其它服务器资源(包括数据库和基于Java的应用程序)进行通信。   (4)用多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上。例如,Servlet可以是多参与者的游戏服务器。   (5)当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至applet的新连接,并将该连接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下,applet也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准(如IIOP)进行通信。   (6)对特殊的处理采用MIME类型过滤数据,例如图像转换和服务器端包括(SSI)。   (7)将定制的处理提供给所有服务器的标准例行程序。例如,Servlet可以修改如何认证用户。   2.Servlet的生命周期   Servlet的生命周期始于将它装入Web服务器的内存时,并在终止或重新装入Servlet时结束。

(1)初始化   在下列时刻装入Servlet: 如果已配置自动装入选项,则在启动服务器时自动装入 在服务器启动后,客户机首次向Servlet发出请求时 重新装入Servlet时装入Servlet后,服务器创建一个Servlet实例并且调用Servlet的init()方法。在初始化阶段,Servlet初始化参数被传递给Servlet配置对象。   (2)请求处理   对于到达服务器的客户机请求,服务器创建特定于请求的一个“请求”对象和一个“响应”对象。服务器调用Servlet的service()方法,该方法用于传递“请求”和“响应”对象。service()方法从“请求”对象获得请求信息、处理该请求并用“响应”对象的方法以将响应传回客户机。service()方法可以调用其它方法来处理请求,例如doGet()、doPost()或其它的方法。   (3)终止   当服务器不再需要Servlet,或重新装入Servlet的新实例时,服务器会调用Servlet的destroy()方法。   3.JavaServletAPI   JavaServlet开发工具(JSDK)提供了多个软件包,在编写Servlet时需要用到这些软件包。其中包括两个用于所有Servlet的基本软件包:javax.servlet和javax.servlet.   HTTPServlet使用一个HTML表格来发送和接收数据。要创建一个HTTPServlet,请扩展HttpServlet类,该类是用专门的方法来处理HTML表格的GenericServlet的一个子类。HTML表单是由FORM和/FORM标记定义的。表单中典型地包含输入字段(如文本输入字段、复选框、单选按钮和选择列表)和用于提交数据的按钮。当提交信息时,它们还指定服务器应执行哪一个Servlet(或其它的程序)。HttpServlet类包含init()、destroy()、service()等方法。其中init()和destroy()方法是继承的。   (1)init()方法   在Servlet的生命期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。   缺省的init()方法通常是符合要求的,但也可以用定制init()方法来覆盖它,典型的是管理服务器端资源。例如,可能编写一个定制init()来只用于一次装入GIF图像,改进Servlet返回GIF图像和含有多个客户机请求的性能。另一个示例是初始化数据库连接。缺省的init()方法设置了Servlet的初始化参数,并用它的ServletConfig对象参数来启动配置,因此所有覆盖init()方法的Servlet应调用super.init()以确保仍然执行这些任务。在调用service()方法之前,应确保已完成了init()方法。   (2)service()方法   service()方法是Servlet的核心。每当一个客户请求一个HttpServlet对象,该对象的service()方法就要被调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在service()方法。缺省的服务功能是调用与HTTP请求的方法相应的do功能。例如,如果HTTP请求方法为GET,则缺省情况下就调用doGet()。Servlet应该为Servlet支持的HTTP方法覆盖do功能。因为HttpServlet.service()方法会检查请求方法是否调用了适当的处理方法,不必要覆盖service()方法。只需覆盖相应的do方法就可以了。 当一个客户通过HTML表单发出一个HTTPPOST请求时,doPost()方法被调用。与POST请求相关的参数作为一个单独的HTTP请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用doPost()方法。 当一个客户通过HTML表单发出一个HTTPGET请求或直接请求一个URL时,doGet()方法被调用。与GET请求相关的参数添加到URL的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用doGet()方法。   Servlet的响应可以是下列几种类型:   一个输出流,浏览器根据它的内容类型(如text/HTML)进行解释。   一个HTTP错误响应,重定向到另一个URL、servlet、JSP。   (3)destroy()方法   destroy()方法仅执行一次,即在服务器停止且卸装Servlet时执行该方法。典型的,将Servlet作为服务器进程的一部分来关闭。缺省的destroy()方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源。例如,如果Servlet在运行时会累计统计数据,则可以编写一个destroy()方法,该方法用于在未装入Servlet时将统计数字保存在文件中。另一个示例是关闭数据库连接。当服务器卸装Servlet时,将在所有service()方法调用完成后,或在指定的时间间隔过后调用destroy()方法。一个Servlet在运行service()方法时可能会产生其它的线程,因此请确认在调用destroy()方法时,这些线程已终止或完成。   (4)GetServletConfig()方法   GetServletConfig()方法返回一个ServletConfig对象,该对象用来返回初始化参数和   ServletContext。ServletContext接口提供有关servlet的环境信息。   (5)GetServletInfo()方法   GetServletInfo()方法是一个可选的方法,它提供有关servlet的信息,如作者、版本、版权。   当服务器调用sevlet的Service()、doGet()和doPost()这三个方法时,均需要“请求”和“响应”对象作为参数。“请求”对象提供有关请求的信息,而“响应”对象提供了一个将响应信息返回给浏览器的一个通信途径。javax.servlet软件包中的相关类为ServletResponse和ServletRequest,而javax.servlet.







































北京白癜风医院那个好
北京看白癜风最好医院



转载请注明:http://www.guyukameng.com/http/2785.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了