ie和火狐解析window.location.href的路径问题!

阿诺 2013-03-08 04:14:04
前提条件:
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"; 这样虽然说部署上去是可以了。但是不知道根本原因啊!

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

...全文
536 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
y234239150 2013-05-17
  • 打赏
  • 举报
回复
你web.xml中给servlet加了包名(/servlet/*) 如果请求返回是跳转的方式 url是当前包路径 如果是重定向 url是站点根目录。。。 你是另一个servlet/xxxservlet请求 再dispatcher进入这个页面的吧? 要么写上${request.contextPath} 要么就在你页面head里边加上<base>标签
wmyasw 2013-03-12
  • 打赏
  • 举报
回复
写绝对路径 有可能会暴露你的位置! 你用 ../servlet 试试
liangtu 2013-03-12
  • 打赏
  • 举报
回复
引用 2 楼 anybyb 的回复:
发了一个贴过了这么久也没有人回答啊!此贴沉了!!!!!!!!
在url中加入${pageContext.request.contextPath}试试
阿诺 2013-03-11
  • 打赏
  • 举报
回复
发了一个贴过了这么久也没有人回答啊!此贴沉了!!!!!!!!
阿诺 2013-03-09
  • 打赏
  • 举报
回复
额 一个人都木有

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧