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>

  • 相关阅读:
    P2257 YY的GCD(莫比乌斯反演)
    P2522 [HAOI2011]Problem b(莫比乌斯反演)
    HAProxy 配置文件
    Android5.1 默认主launcher、强制主launcher
    【Spring 从0开始】IOC容器的Bean管理
    【Spring 从0开始】IOC容器的Bean管理
    【Spring 从0开始】IOC容器的Bean管理
    Linux 命令里两个连续的减号(--)是表示什么?
    从k8s集群中删除节点后重新加入的方法
    下载外网docker镜像的方法
  • 原文地址:https://www.cnblogs.com/hcwys/p/8650485.html
Copyright © 2011-2022 走看看