由于JAVA和JSP是区分大小写,我想请问如何对URL进行过滤。比如正常的URL是:http://www.java-cn.com/bbs-jsp/index.jsp?forum=jsp,我想以下这样的地址也能访问:
http://www.java-cn.com/bbs-jsp/indEx.JSP?forum=jsp
http://www.java-cn.com/bbs-jsp/index.jsp?fOrum=jSP
http://www.java-cn.com/bbs-jSp/index.jsp?forum=jsp
http://www.java-cn.com/bbS-jsp/index.jsp?forum=jsp
http://www.JAVA-cn.com/bbs-jsp/Index.jsp?Forum=jsp等等这些,意思就是我在浏览这个地址的时候,使其大小写都能浏览,而不报错。Thanks!!

解决方案 »

  1.   

    可能要写个 dispatcher 把 URL 转换成全小写再往里传。
    能力有限,不会!
      

  2.   

    为什么有这个需求?!干吗要大小写不敏感?!规则已然制定,就需要遵守,干吗去破坏其中有几个或许还有办法,利用Filter+RequestWrapper,域名只能自己去注册,ContextPath只能靠多发布几个WebApp
      

  3.   

    这样不行的,我开始在Servlet中用String url=request.getURL().toString;获得URL地址,然后我在转换为小写,最后用request.getRequestDisPatecher("sss.jsp").forward(request,response);进行转向。XML中配置的SERVLET的URL映射为*,虽然能这样想,可是,意想不到的情况是:无限循环出现了。
      

  4.   

    跟你说了,用filter,servlet是会doXXX无限次的,不管是直接来自客户端的request,还是内部forward/include过来的而filter默认只接受request,而不会响应forward/include.
      

  5.   

    我想写个filter应该也是可以的,把url全部转化为大写或者小写
      

  6.   

    package xxx;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.HttpServletRequestWrapper;public class CaseFilter implements Filter {
      public void init(FilterConfig filterConfig) throws ServletException {
      }
      public void destroy() {
      }
      public void doFilter(ServletRequest request,
                           ServletResponse response,
                           FilterChain chain) throws IOException, ServletException {
        final HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(httpRequest) {
          public String getServletPath() {
            return super.getServletPath().toLowerCase();
          }
        };
        chain.doFilter(wrapper, response);
      }
    }web.xml
    在<servlet>之前<filter>
      <filter-name>case</filter-name>
      <filter-class>xxx.CaseFilter</filter-class>
    </filter><filter-mapping>
      <filter-name>case</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  7.   

    Thanks!
    我还没试,不过先谢过了,如愿意的话,请留QQ或者MSN。
    也可以加我,
    QQ:963415
    MSN:[email protected]