成都朗沃T65《Java web编程》第七章过滤器_zhengyan_新浪博客

过滤器:
1. 作用:
   拦截源数据和目的数据之间的内容;
   比如说:将客服端发送的‘jr’替换成‘×××’,浏览器显示的就是替换后的内容;
   2.什么叫表链接:
   对同一个内容多次过滤;
过滤器和包装器实现步骤:
 1.实现javax.servlet.Filter接口
   2.重写方法
       
public class TestFilter implements Filter{
                  
 @Override
 public void destroy() {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void doFilter(ServletRequest arg0, ServletResponse arg1,
   FilterChain arg2) throws IOException, ServletException {
  // TODO Auto-generated method stub
   HttpServletRequest request =(HttpServletRequest) arg0;------必须强转成父接口
   arg2.doFilter(new Mycharset(request), arg1);------调用dofilter()方法执行后面的操作
 }
   //写了一个内部类继承HttpServletRequestWrapper包装类
   public class Mycharset extends HttpServletRequestWrapper{
    private HttpServletRequest request;
 public Mycharset(HttpServletRequest request) {
  super(request);
  this.request=request;
  
 
 }
     //重写getParameter()获得界面输入的参数进行过滤
 @Override
 public String getParameter(String name) {
  String all=this.request.getParameter(name);
  try {
 //                 将所有的参数转成ISO8859-1这种类型的字符编码
   byte [] by=all.getBytes("ISO8859-1");
                             //再转成gbk,输出来就不会是乱码
  all= new String(by,"gbk");
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
                     //进行其它业务扩展,比如说将"jr"替换成‘*’,在浏览器看到的就是‘*’
  if(all.indexOf("jr")!=-1){
   all=all.replaceAll("jr", "*");
  }
  return all;
 }
   
   }
                  //重写初始化方法
 @Override
 public void init(FilterConfig arg0) throws ServletException {
  // TODO Auto-generated method stub
  
 }

}
##########   配置过滤器  ######
 使用filter标签
<filter>
            <filter-name>HelloWorldFilter</filter-name>
            <filter-class>com.lovobook.HelloWorldFilter</filter-class>
         </filter>
         <!-- 将过滤器与URL模式关联,表示对什么资源进行过滤-->
         <filter-mapping>
            <filter-name>HelloWorldFilter</filter-name>
            <url-pattern>/filter/*</url-pattern>//对请求URL对应的资源过滤/*表示对所有的请求过滤
    <servlet-name>testServlet</servlet-name>//对servlet过滤
         </filter-mapping>
#########  过滤器类型#########
一共有四种:REQUEST,表示对请求过滤
                      FORWORD,请求转发过滤
                      INCLUDE,请求资源经过include才会执行
                       ERROR,定义异常机制才会执行;
<filter-mapping>
         <filter-name>ValidatorFilter</filter-name>
         <url-pattern>/filter/*</url-pattern>
  <dispatcher></dispatcher>-------过滤器标记

############      过滤器执行顺序############

1.如果是配置的都是url-pattern,按照配置顺序执行;
2.如果url-pattern和servlet-name同时出现,先执行url-pattern,再执行url-pattern
############       包装器        ################
作用:用于在客服端请求的内容在显示之前更改
HttpServletRequestWrapper和HttpServletResponseWrappe实现了HttpServletReques和HttpServletResponse接口
当我们继承HttpServletRequestWrapper和HttpServletResponseWrappe时就可以实HttpServletReques和HttpServletResponse
就可以写自己的业务逻辑;

已投稿到:
郑重声明:资讯 【成都朗沃T65《Java web编程》第七章过滤器_zhengyan_新浪博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——