zoukankan      html  css  js  c++  java
  • Filter用户例子

    原创文章,鼓励转载请务必注明出处,作者:李佳

    最近项目中需要转换路径,把访问/m ,/m/,/m/* 的连接分发到三种不同类型的手机中,解决方法是使用Filter,在进入Servlet之前进行拦截,之后改变显示路径相关代码如下:

    package common.util.mobile;

    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;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;

    import common.init.InitParam;

    public class MoblieFilter implements Filter{

     protected FilterConfig filterConfig;
     
     public void destroy() {
     }

     public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
      try{
      HttpServletRequest httpRequest = (HttpServletRequest)request;
      HttpServletResponse httpResponse = (HttpServletResponse)response;
      String requestURL = httpRequest.getRequestURI();
      InitParam.DebugLog("[doFilter:] Coming URL:" + requestURL);
      String replacement = "/i/";
      if(requestURL.equals("/m/") ||requestURL.equals("/m")){
       httpRequest.getRequestDispatcher(httpResponse.encodeURL("/m/index.servlet?moblie=true")).forward(request, response);
       //httpResponse.sendRedirect(httpResponse.encodeRedirectURL("/m/index.servlet?moblie=true"));
      } else
      {
       int mobiletype = Carrier.recognize(httpRequest);
       if(mobiletype == Carrier.IMODE){
        replacement = "/i/";      
       }else if(mobiletype == Carrier.JSKY){
        replacement = "/j/";      
       }else if(mobiletype == Carrier.EZWEB){
        replacement = "/e/";      
       }
       InitParam.DebugLog("[doFilter:] Final URL:" + requestURL.replaceFirst("/m/",replacement));
       httpRequest.getRequestDispatcher(requestURL.replaceFirst("/m/",replacement)+"?moblie=true").forward(request, response);
       //httpResponse.sendRedirect(httpResponse.encodeRedirectURL(requestURL.replaceFirst("/m/",replacement)+"?moblie=true"));
      }
      chain.doFilter(request, response);
      }catch (Exception e) {
       
      }
     }

     public void init(FilterConfig filterConfig) throws ServletException {
         this.filterConfig = filterConfig;

     }
    }

    在web.xml中加入如下配置:

    <filter>
      <filter-name>mobilefilter</filter-name>
      <filter-class>common.util.mobile.MoblieFilter</filter-class>
     </filter>
     <filter-mapping>
      <filter-name>mobilefilter</filter-name>
      <url-pattern>/m/</url-pattern>
     </filter-mapping>
     <filter-mapping>
      <filter-name>mobilefilter</filter-name>
      <url-pattern>/m</url-pattern>
     </filter-mapping>
     <filter-mapping>
      <filter-name>mobilefilter</filter-name>
      <url-pattern>/m/*</url-pattern>
     </filter-mapping>

  • 相关阅读:
    rabbitmq发送消息的两种格式:发送json数据和直接发送对象以及对json与对象之间的相互转换
    rabbitmq 的hello world程序
    rabbitmq用户管理、角色、权限管理以及UI管理界面的使用
    redis设置密码以及安装到服务
    mybatis- generator自动生成代码
    COGS 有标号的二分图计数系列
    Codeforces183D T-shirt
    bzoj3473 字符串
    51Nod1782 圣诞树
    51Nod1601 完全图的最小生成树计数
  • 原文地址:https://www.cnblogs.com/hcwys/p/8650485.html
Copyright © 2011-2022 走看看