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>

  • 相关阅读:
    VKD224B触摸芯片调试笔记
    liunx 常用命令学习笔记
    2440 裸机学习 点亮LED
    单端正激变换器
    c# 文件与流
    c# 接口笔记
    Ubuntu18.04 server安装步骤
    how to force git to overwritten local files
    Linux基础
    解决Linux下Firefox无法启动的问题
  • 原文地址:https://www.cnblogs.com/hcwys/p/8650485.html
Copyright © 2011-2022 走看看