黑马程序员_JAVA 学习笔记25 WEB篇12

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net

下面是一个过滤器:
public class Fileter implements Filter
{


@Override
public void destroy()
{


}


@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, 


ServletException
{
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
HttpSession session = req.getSession();
String url = req.getRequestURI();
//注意,此处调用完doFilter之后一定要加上return不然下面会发生重


定向错误。
if(url.endsWith("fileter/login.jsp") || url.endsWith


("loginChecked"))
{
chain.doFilter(req, resp);
return;
}
if(session.getAttribute("user") != null)
{
chain.doFilter(req, resp);
}
else
{
//特别注意,此处不要加fileter的文件夹名,不然浏览器地


址会多一个fileter。
//此处就不需要在重定向后加上请求参数了,因为


loginChecked已经完成了这份工作了。
//resp.sendRedirect("login.jsp?


username="+req.getParameter("username")+"&radio="+req.getParameter("radio"));
resp.sendRedirect("login.jsp");
return;
}


}


@Override
public void init(FilterConfig filterConfig) throws ServletException
{

}

}
上面有两个要注意的两个点。
下面是成功页面,和没有过滤器的成功页面有什么区别呢?


  <body>
    checked<br>
    
   <%
   String radio = (String)session.getAttribute("radio");
  
   if(radio.equals("1"))
  {
  out.println("有");
  }
  %>
  </body>
这是过滤器的配置文件:
<filter>
    <filter-name>login</filter-name>
    <filter-class>Fileter.Fileter</filter-class>
    </filter>
    
    <filter-mapping>
    <filter-name>login</filter-name>
    <url-pattern>/*</url-pattern>
   </filter-mapping>
   
   *表示检测所有页面。
   下面是用过滤器替换掉其中的一些字:


public class MinGanFilter implements Filter
{


@Override
public void destroy()
{

}


@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, 


ServletException
{
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
String text = req.getParameter("textarea");
System.out.println(text);
String te = text.replace("zhang", "li");
req.setAttribute("textarea", te);
chain.doFilter(req, resp);
}


@Override
public void init(FilterConfig filterConfig) throws ServletException
{

}


}
   
   
   过滤器如果只过滤一个只需要写要过滤的就行了,不要写*否则影响效率。


   下面是双filter的例子:
<body>
    <form action = "filtershuan">
    <input type = "textarea" name = "textarea">
    <input type = "submit" value = "dengLu">
       </form>
   
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, 


ServletException
{
System.out.println("before");
chain.doFilter(request, response);
System.out.println("after");

    }
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, 


ServletException
{
// TODO Auto-generated method stub
System.out.println("before1");
chain.doFilter(request, response);
System.out.println("after1");

    }
   
<filter>
     <filter-name>filter1</filter-name>
     <filter-class>Fileter.filter1</filter-class>
     </filter>
     
     <filter>
      <filter-name>filter2</filter-name>
      <filter-class>Fileter.filter2</filter-class>
     </filter>
     
     <filter-mapping>
      <filter-name>filter1</filter-name>
      <url-pattern>/filtershuan</url-pattern>
     </filter-mapping>
      <filter-mapping>
      <filter-name>filter2</filter-name>
      <url-pattern>/filtershuan</url-pattern>
        </filter-mapping>
   结果:
before
before1
after1
   after
   
   这样的结果不是由哪个filter先写的造成的而是根据xml中filter的先后顺序造成


的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值