zoukankan      html  css  js  c++  java
  • 《JSP2.0技术手册》读书笔记三Filter

    Filter,即过滤器了,很形象地说明了它的作用-在结果发生前获得控制做出相应操作,主要是改变一个请求或修改一个响应。具体运用情况如下:

    1. 统一的认证处理。 2. 对用户的请求做检查、做更精确的记录。

    3. 监视或对用户所传递的参数做前置处理。 4. 改变图像文件的格式

    5. 对响应做编码的动作 6. 对响应做压缩处理

    7. 对xml的输出使用xslt来转换

    想要清楚地明白它在web应用中的位置和作用,就需要了解它的运作方式,下图较为形象:

    由图可知:

    1。一个响应或请求是经由过滤链层层转发的。一个Filter做完处理后,调用FilterChain.doFilter()来转送给其他Filter做处理。

    2。Filter可以在request到达servlet或Jsp之前预处理请求,也可以在响应到达客户端前处理响应。

    3。当客户端发出web资源请求时,web服务器根据web.xml设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行检查或改动,并依次通过过滤器链,最后把请求/响应交给请求的web资源处理。

    补:Filter做完处理后一般使用FilterChain.doFilter()来让其他Filter继续过滤。但也可以调用RequestDispatcher的forward()、include()方法转发请求,RequestDispatcher对象可由HttpServletRequest.getRequestDispatcher(uri)得到。还可以使用HttpServletResponse的sendRedirect(uri)、sendError(int statusCode)或sendError(int statusCode,String msg)来做出相应。

    Filter可以处理不同的请求,这需要在web.xml中设置,如下:

     

    REQUEST:只有当用户直接对网页做出请求的动作时,通过此Filter。一般默认情况为REQUEST。

    FORWARD:当用户的请求是通过RequestDispatcher.forward()方法时,通过此Filter。

    INCLUDE:当用户的请求是通过RequestDispatcher.include方法时,通过此Filter。还必须把<url-pattern>改成<servlet-name>,意思是当请求从servlet-name指定的servlet发出并且通过requestdispatcher.include()时,才通过此Filter。

    ERROR:当用户的请求是通过错误机制处理的时候,通过此Filter。

    我们来了解下RequestDispatcher接口。通常可用获得一个requestDispatcher对象,封装由一个特定的URL定义的服务器资源。从客户端接收请求,然后发给服务器端的可用资源(servlet/JSP等)。通常是通过HttpServletRequest.getRequestDispatcher(uri)来获得具体对象。forward(request,response)方法用来从生成它的servlet向其他资源传递请求;include(request,response)方法用来包括发送给其他服务器端资源的响应的内容。

    Filter的使用:

    1. 所有过滤器都必须实现javax.servlet.Filter接口。此接口中方法有:

    1.1 public void init(FilterConfig config):当Filter被加载时执行。FilterConfig可用获得web.xml定义的该过滤器的名字-config.getFilterName(),可以获得ServletContext对象、web.xml设定的过滤器初始参数(param-name,param-value)。

    1.2 public void doFilter(ServletRequest,ServletResponse,FilterChain):可以对请求和响应做处理,然后调用filterChain.doFilter()将控制权传给下一个Filter。若此Filter已为过滤链中最后一个过滤器,则运行最初请求的servlet或jsp。

    1.3 public void destroy():当doFilter执行完毕就会调用此方法,释放资源,一般不需要使用。

    2. 在web.xml中配置此过滤器的过滤规则。

     

    我们经常用过滤器来进行访问权限控制、编码处理等。下面就举一个最实用的例子,解决乱码!

            首先定义过滤器SetCharacterEncodingFilter,它是tomcat自带的一个类,可以在网上找到源代码,引入到项目中就可使用了,现贴出代码如下:

     

    其次就是配置过滤规则了:

     

    真是太舒服了!这比任何其他解决中文乱码问题的办法都有效简洁!

  • 相关阅读:
    JS高程研读记录一【事件流】
    事件冒泡的应用——jq on的实现
    模式学习小结[工厂模式|构造函数|原型模式]
    几个CSS-content的小例子
    构造函数new执行与直接执行的区别
    gulp布局构建小结
    理解上下文与作用域
    定义变量的注意问题
    JUC的世界III
    JUC的世界II
  • 原文地址:https://www.cnblogs.com/whuqin/p/4982126.html
Copyright © 2011-2022 走看看