日期:2014-05-18  浏览次数:20758 次

ie和火狐解析window.location.href的路径问题!
前提条件:  
    a.jsp在WEB-INF(或者其子目录)下面。a.jsp有个超链接<a herf="javaScript:voiod(0)"   
    onclik="test()l;return false"></a>
 js:如下
    function test(){
     var url="servlet/ProjectServlet?method=getProjectLis";  
     window.location.href=url;
   }
我有一个过滤器配置的是拦截所有servlet开头的请求即:<url-pattern>/servlet/*</url-pattern>
然后我再过滤器中输出请求的路径
就这样 我用ie访问  输出路径是:/servlet/servlet/ProjectServlet  明显多了一个/servlet。
火狐是:/servlet/ProjectServlet 完全正确。
为了使ie火狐可行!我使用就js获取项目根目录 加上根目录来访问 做法如下:
js:获取根目录:
    function getContextPath() {
    var pathName = document.location.pathname;
    var index = pathName.substr(1).indexOf("/");
    var result = pathName.substr(0,index+1);
    return result;
  }
修改test()函数:
    function test(){
    var path=getContextPath();
   var url=path+"/servlet/ProjectServlet?method=getProjectList";  
   window.location.href=url;
  }
此时ie解析和火狐相同均为:/servlet/ProjectServlet。
本以为大功告成,但是项目部署后访问就全部乱了。ie,火狐解析到的路径都是/servlet/servlet/ProjectServlet。找其原因是因为:部署后访问去掉了项目名称。我以前本地是
http://localhost:8080/项目名 这样来访问的。部署到服务器上就只是http://localhost:8080了。但是为什么会是/servlet/servlet/ProjectServlet呢?我在js中alert(path) .发现:
本地访问需要输入项目时  alert的就是项目名称。而服务器上alert的确实 /servlert (web.xml中配置的拦截开始路径)。

不知道这到底是为什么?我试了 如果a.jsp直接在webRoot下面的话 不会有这样的情况 路径写成: var url="servlet/ProjectServlet?method=getProjectLis";  全部都是可以的!只有在web_inf下面的时候 出现上述情况!
头都大了,不知道原因。为了解决路径问题!我只好修改所以有关的路径将
 var url=path+"/servlet/ProjectServlet?method=getProjectList";改为
 var url=path+"/ProjectServlet?method=getProjectList"; 这样虽然说部署上去是可以了。但是不知道根本原因啊!

有木有人知道呢?求原因 求详解!
    
 

------解决方案--------------------
引用:
发了一个贴过了这么久也没有人回答啊!此贴沉了!!!!!!!!


在url中加入${pageContext.request.contextPath}试试
------解决方案--------------------
写绝对路径 有可能会暴露你的位置! 你用 ../servlet  试试