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>

  • 相关阅读:
    CSS揭秘(六用户体验)
    CSS揭秘(五字体排印)
    CSS揭秘(四视觉效果)
    java split() 使用 . 来分割,转义(“” "|" "*" "+")
    springboot get请求405 Method Not Allowed
    websocket前端消息读取问题
    java解决中文乱码问题(jar包运行时中文返回前端数据或者控制台输出乱码问题)
    解决mysql 允许执行 XA RECOVER语句(atomikos 解决分布式事务报错)
    navicat修改mysql密码
    mybatisplus添加字段填充
  • 原文地址:https://www.cnblogs.com/hcwys/p/8650485.html
Copyright © 2011-2022 走看看