我在本地创建了一个过滤器,把指定地址的参数改成用"/"区分了, 在本地测试可以运行,但是发布到了服务器上就出现了404错误了。(我在filter里加了个system.out的测试语句)
配置是:/servlet/*
例如我在本地运行:http://127.0.0.1/path/servlet/user_id/user1,那filter 会自动把它自动转换成(有测试语句输出)
http://127.0.0.1/path/servlet?user_id=user1的但不知为什么到了服务器上 输入 http://192.168.1.101/path/servlet/user_id/user1, 它就报404 page not found(没测试语句输出)
但输入 http://192.168.1.101/path/servlet 就没事然后再尝试改filter的配置 /*
再次测试以上的例子 在本地两个地址都能输出测试语句, 但到了服务器上 第一个链接还是没有测试语句输出,第二个链接是有输出的。
所以我怀疑跟服务器的配置有关我们的服务器是 AIX + Websphere.
哪位高手能指点我吗?

解决方案 »

  1.   

    我已经在filter里面为它转义了~~问题就是它没有进到我的filter里面去。
      

  2.   

    楼主的服务器与本机环境相同吗?
    仔细看看web.xml配置文件!
      

  3.   

    web.xml的配置是一样的~~
    但是运行的环境不一样~~
      

  4.   

    404肯定是路径的问题。
    运行环境如何不一样?
    输入http://192.168.1.101/path/servlet 没问题
    输入 http://192.168.1.101/path/servlet/user_id/user1 就有问题说明是/user_id/user1 这出了问题 这出问题的地方也只能是 / 的转义了。
    楼主还是自己检查下吧。要不把filter贴出来让大家看看
      

  5.   

    但我在本地运行没问题的喔~~
    filter code:
    RequestDispatcher disptcher = null;
    HttpServletRequest req = (HttpServletRequest) servletRequest;

    System.out.println(req.getQueryString());
    try {
    String [] lStrLink = UTIL_COMMON.fnSplitString(req.getRequestURL().toString(),"/SASC_cIMG/");
    String [] params = null;
    StringBuffer lStrParma = null;
    System.out.println(lStrLink.length);
    if (lStrLink.length >1){
    params = UTIL_COMMON.fnSplitString(lStrLink[1],"/");
    if (params.length%2 != 0){
    //alert error
    }else{
    lStrParma = new StringBuffer();
    for (int i =0;i<params.length;i++){
    lStrParma.append(params[i]);
    if (i % 2 == 1){
    if ((i + 1) != params.length)
    lStrParma.append("&");
    }else{
    lStrParma.append("=");
    }
    }

    System.out.println("lStrParma:" + lStrParma);
    String lStrLinkImg = lStrLink[0] + "/SASC_cIMG?" + lStrParma;
    System.out.println("lStrLinkImg:" + lStrLinkImg);
    //disptcher = req.getRequestDispatcher(lStrLinkImg);
    disptcher = req.getRequestDispatcher("SASC_cIMG?" + lStrParma); 
    UTIL_LOGGER.fnWriteLog("ImgLinkFilter","doFilter",disptcher.toString());
    disptcher.forward(servletRequest, servletResponse);
    }


    }else{
    filterChain.doFilter(servletRequest, servletResponse);
    }
      

  6.   

    检查web.xml,可以逐行的试,就能找到问题了,貌似再没有什么有效的方法
      

  7.   

    我是deploy到上面测试的,配置已经改成"/*" 根目录了,当该路径确实不存在的时候,就报404错误,如果服务器确实存在该目录或者servlet的话就可以进入到filter里面。