javax.servlet.Filter简单运用

 Servlets Filter 是Servlet 2.3 规范中新增加的(在tomcat/lib/servlet-api.jar),它是截取用户从客户端提交的请求,在还没有到达需要访问的资源时运行的一个类。它操纵来自客户端的请求,在资源还没有初发送到客户端前截取响应,并处理这些还没有发送到客户端的响应。
  
  Filters 有许多的应用场合。Servlet 2.3 规范建议如下的地方可以应用Filter:
  
  authentication filters
  logging and auditing filters
  image conversion filters
  data compression filters
  encryption filters
  tokenizing filters
  filters that trigger resource access events
  XSL/T filters that transform XML content
  MIME-type chain filters
  
  例:
  
  package jasso.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;
  
  
  /**
  *
  * @author
  */
  public class SetCharacterEncodingFilter implements Filter {
  
  private String encoding;
  
  /**
  * Called by the web container to indicate to a filter that it is being
  * taken out of service.
  *
  * @todo Implement this javax.servlet.Filter method
  */
  public void destroy() {
  }
  
  /**
  * The doFilter method of the Filter is called by the
  * container each time a request/response pair is passed through the chain
  * due to a client request for a resource at the end of the chain.
  *
  * @param request
  * ServletRequest
  * @param response
  * ServletResponse
  * @param chain
  * FilterChain
  * @throws IOException
  * @throws ServletException
  * @todo Implement this javax.servlet.Filter method
  */
  public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
   request.setCharacterEncoding(encoding);
   chain.doFilter(request, response);
  }
  
  /**
  * @see javax.servlet.Filter#init(FilterConfig)
  */
  public void init(FilterConfig config) throws ServletException {
   encoding = config.getInitParameter("encoding");
  }
  
  
  }
  
  web.xml部分
  
  ......
  
  
   encodingFilter
   my.web.filter.SetCharacterEncodingFilter
  
   encoding
   Shift_JIS
  
  
  
  
   encodingFilter
   action
  
  
   action
   org.apache.struts.action.ActionServlet
  
   config
   /WEB-INF/config/struts-config.xml,/WEB-INF/config/struts-config-contents.xml
  
  
   debug
   2
  
  
   detail
   2
  
   1
  
  
  
  
  ----------------------------------------------
  
  javax.servlet.filter的用法
  如何实现一个过滤器呢?
  1.所在的类实现Filter接口
   public interface Filter
  public void init(FilterConfig filterConfig)throws ServletException
  过滤器初始化是在容器启动时自动初始化
  public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletExcepton
  在标准Servlet中的doGet或doPost 方法中,传递参数为:HttpServletRequest、HttpServletResponse
  过滤器销毁
  public void destroy()
  
  package cn.mldn.lxh.filter
  import java.io.*;
  import javax.servlet.*;
  public class FirstFilter implements Filter
  {
   public void init(FilterConfig config)throws ServletException
   {
   System.out.println("过滤器初始化");
   }
    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException
  {
  System.out.println(过滤doFilter);
  }
   public void destroy()
  {
  System.out.println(过滤器销毁);
  }
  }
  
  web.xml文件配置
  
   first
   cn.mldn.lxh.filter.FirstFilter
  
  
  
   first
  
  与servlet中的url-pattern不一样,此处表示对那个页面进行过滤,如果全部都过滤,则"/*"
   /*
  
  
  如果过滤器要将内容传递到目的地,则需要FilterChain,将请求继续向下转发
  
  过滤器也会执行两次:FilterChain这前执行一次,之后再执行一次
  
  1.过滤非法文字:
  package cn.mldn.lxh.filter;
  import java.io.*;
  import javax.servlet.*;
  public class CharFilter implements Filter
  {
  public void init(FilterConfig filterConfig)throws ServletException
  {
   //System.out.println("init");
  }
  public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
  {
  String content=request.getParameter("content");
  //如果indexOf返回-1则表示没有查到所要的内容
  if(content!=null)
  if(content.indexOf("AAA")==-1)
  {
  chain.doFilter(request,response);
  }
  esle
  {
  System.out.println("有非法文字");
  //如果需要的话,此处依然可以使用RequestDispatcher进行跳转
  }
  }
  else
  {
  chain.doFilter(request,response);
  }
  }
  public void destroy()
  {
  //System.out.println("过滤器销毁");
  }
  
  
   char
   cn.mldn.lxh.filter.CharFilter
  
  
  
   char
   /*
  
  
  2.对内容进行统一的编码
  setCharacterEncoding("GB2312");
  
  package cn.mldn.lxh.filter;
  import java.io.*;
  import javax.servlet.*;
  public class EncodingFilter implements Filter
  {
  public void init(FilterConfig filterConfig)throws ServletException
  {
  //System.out.println("过滤器初始化");
  }
  public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
  {
  try{
  request.setCharacterEncoding("GB2312");
  }
  catch(Exception e)
  {}
  chain.doFilter(request,response);
  }
  public void destroy()
  {
  //System.out.println("销毁");
  }
  }
  
  
   encoding
  
  
  
  
   encoding
   /*
  
  
  3.登陆验证
  package cn.mldn.lxh.filter;
  import java.io.*;
  import javax.servlet.*;
  import javax.servlet.http.*;
  
  public class LoginFilter implements Filter
  {
  public void init(FilterCoinfig filterConfig)throws ServletException
  {
  //System.out.println("过滤器初始化");
  }
  public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
  {
  //Session属于http范畴,把以ServletRequest对象需要先转换成HttpServletRequest对象
  HttpServletRequest req=(HttpServletRequest)request;
  HttpSession session =req.getSession();
  //如果session不为空,则可以浏览其它页面
  if(session.getAttribute("uname")!=null)
  {
  chain.doFilter(request,response);
  }
  else
  {
  //通过requestDispatcher跳转到登陆面
  request.getRequestDispatcher("login.jsp").forward(request,response);
  }
  }
  public void destroy()
  {
  //System,out.println("销毁");
  }
  }
  
  
   login
   cn.mldn.lxh.filter.LoginFilter
  
   参数名称
   参数值
  
  
  
   login
   /*
  
  
  读取web.xml中的参数的方法:
  
  public void init(FilterConfig arg0) throws ServletException {
  String 参数值= arg0.getInitParameter("参数名称");
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Files contained in javax.servlet.jar: META-INF/MANIFEST.MF javax/servlet/http/LocalStrings.properties javax.servlet.http.HttpSessionBindingListener.class javax.servlet.http.HttpSessionBindingEvent.class javax.servlet.http.HttpSessionEvent.class javax.servlet.http.HttpSession.class javax.servlet.http.HttpSessionContext.class javax.servlet.http.Cookie.class javax.servlet.http.HttpSessionAttributeListener.class javax.servlet.http.HttpServlet.class javax.servlet.http.HttpServletRequest.class javax.servlet.http.HttpServletResponse.class javax.servlet.http.NoBodyResponse.class javax.servlet.http.NoBodyOutputStream.class javax.servlet.http.HttpServletRequestWrapper.class javax.servlet.http.HttpSessionActivationListener.class javax.servlet.http.HttpSessionListener.class javax.servlet.http.HttpUtils.class javax.servlet.http.HttpServletResponseWrapper.class javax/servlet/resources/web-app_2_2.dtd javax/servlet/resources/j2ee_1_4.xsd javax/servlet/resources/j2ee_web_services_client_1_1.xsd javax/servlet/resources/j2ee_web_services_1_1.xsd javax/servlet/resources/XMLSchema.dtd javax/servlet/resources/jsp_2_0.xsd javax/servlet/resources/javaee_web_services_client_1_2.xsd javax/servlet/resources/datatypes.dtd javax/servlet/resources/web-app_2_3.dtd javax/servlet/resources/jsp_2_1.xsd javax/servlet/resources/web-app_2_4.xsd javax/servlet/resources/javaee_5.xsd javax/servlet/resources/web-app_2_5.xsd javax/servlet/resources/xml.xsd javax/servlet/jsp/resources/web-jsptaglibrary_1_1.dtd javax/servlet/jsp/resources/web-jsptaglibrary_1_2.dtd javax/servlet/jsp/resources/web-jsptaglibrary_2_0.xsd javax/servlet/jsp/resources/jspxml.dtd javax/servlet/jsp/resources/jsp_2_0.xsd javax/servlet/jsp/resources/jsp_2_1.xsd javax/servlet/jsp/resources/jspxml.xsd javax/servlet/LocalStrings.properties javax.servlet.ServletContextAttributeListener.class javax.servlet.ServletContextAttributeEvent.class javax.servlet.ServletContextEvent.class javax.servlet.ServletContext.class javax.servlet.RequestDispatcher.class javax.servlet.Servlet.class javax.servlet.ServletException.class javax.servlet.ServletRequest.class javax.servlet.ServletResponse.class javax.servlet.ServletConfig.class javax.servlet.ServletInputStream.class javax.servlet.ServletOutputStream.class javax.servlet.FilterChain.class javax.servlet.ServletRequestEvent.class javax.servlet.Filter.class javax.servlet.FilterConfig.class javax.servlet.ServletRequestAttributeListener.class javax.servlet.ServletRequestAttributeEvent.class javax.servlet.GenericServlet.class javax.servlet.SingleThreadModel.class javax.servlet.ServletRequestWrapper.class javax.servlet.ServletResponseWrapper.class javax.servlet.ServletRequestListener.class javax.servlet.UnavailableException.class javax.servlet.ServletContextListener.class META-INF/maven/org.mortbay.jetty/servlet-api-2.5/pom.xml META-INF/maven/org.mortbay.jetty/servlet-api-2.5/pom.properties

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值