• 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>

  • 相关阅读:
    IG GROUP开源RESTdoclet项目
    Visual Studio 2012 Update 1抢先看
    使用 Windows Azure 移动服务将云添加到您的应用
    WMF 3.0 RTM(包含PowerShell 3.0 )业已发布
    Node.js 0.9.2 发布(非稳定版)
    vsftpd 3.0.1 正式版发布
    Piggydb 6.2 发布,个人知识库管理
    Apache Commons Codec 1.7 发布
    Notepad++ 6.1.8 正式版发布
    gWaei 3.6.0 发布,英日词典
  • 原文地址:https://www.cnblogs.com/hcwys/p/8650485.html
Copyright © 2020-2023  润新知