JAVAweb学习笔记入门

JAVA(filter):过滤器。
Filte是JavaWeb的三大web组件之一Servlet、Filter、Listener 。
它的作用是在请求到达WEB资源(HTML、CSS、Servlet、JSP)之前进行拦截
需要交给Tomcat访问器来管理。
Filter的作用:
在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。 
根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。  
在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

大概流程:
客户端发出request,过滤器进行拦截处理后,将request发送给servlet,然后servlet将给的request处理后 response给过滤器,过滤器response给客户端。

过滤器中的执行顺序:

当我们为一个资源设置了多个过滤器时,这些过滤器就组成一个Filter链的结构。
当我们去掉用chain.doFilter(),如果该过滤器后边还有其他的过滤,
相当于调用了下一个过滤器doFilter()方法
如果过滤器后没有其他的过滤器,我们调用chain.doFilter()
相当于调用了目标资源的service()方法。
注意:

多个Filter的执行顺序,有filter-mapping标签的配置顺序决定,
filter-mappint靠前,则filter先执行,靠后则后执行。
我们可以通过修改filter-mapping的顺序来修改Filter的执行顺序,
但是注意,filter-mapping不能写在filter标签的前边。
创建完成后默认代码,可以看到,CharsetFilter实现了Filter接口,实现了3个方法。3个方法的作用已经在注释中写清楚了。



package com.alex.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

 

/**

 * 来解决 
POST 请求中文乱码问题

 * 拦截器的作用

 *   解决那些问题:

 *       密码加密

 *       对请求参数值进行非法字符过滤

 *       权限控制

 *       登陆验证

 */

public class CharacterEncodingFilter
implements Filter{

 

         String filename;
        @Override
         public void destroy() {
                 System.out.println("destroy... ...");           
         }
         @Override
         public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException { 
                  System.out.println("doFilter  前... ...")          
                  request.setCharacterEncoding("UTF-8");//重复性代码            
              //这个编码设置,一定是获取输出流之前,在获取输出流之后在设置就不管用了
                  response.setContentType("text/html;charset=UTF-8");                 
                  chain.doFilter(request,
response);//放行- 执行后续过滤器,执行目标程
                 //狸猫换太子

                  String name = (String)request.getAttribute("name");
                  request.setAttribute("name",name + "22");                 
                  System.out.println("doFilter  后   ... ...");
         }
         //获取web.xml中filter配置的初始化参数

         @Override
         public void init(FilterConfig filterConfig) throws ServletException {
                  System.out.println("init... ...");
                  filename= filterConfig.getInitParameter("filename");                  
         }

}

配置初始化参数,跟Servlet配置一样

initParams = {
        @WebInitParam(name = "key",value = "value")
}

dispatcherTypes
配置拦截的类型,可配置多个。默认为DispatcherType.REQUEST:

dispatcherTypes = {DispatcherType.ASYNC,DispatcherType.ERROR}
FORWARD,//转发的
INCLUDE,//包含在页面的
REQUEST,//请求的
ASYNC,//异步的
ERROR;//出错的

当服务器一启动就会执行Filter的init(FilterConfig config)方法,然后创建一个过滤器,创建一个实例。当Filter被移除或服务器正常关闭时,会执行destroy方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值