jsp路径问题...郁闷
今天似乎出现灵异事件了...myEclipse6.5GA+tomcat6.0本来运行很好的程序突然路径全都出现错误...比如response.sendRedirect("...
今天似乎出现灵异事件了...
myEclipse6.5GA + tomcat6.0本来运行很好的程序 突然路径全都出现错误...
比如 response.sendRedirect("../client/logon.jsp");
本来没问题的,但现在需要改成response.sendRedirect("client/logon.jsp");
还有图片路径也错误了
原来<td height="57" background="image/MB.png">
都需要改成 <td height="57" background="../image/MB.png">
这中间我没有改变过任何路径阿,image和client都在WebRoot路径下
这要是全都修改...工作量可就大了 我真是搞不明白为什么会出现这种变化啊? 我以前写路径基本上是在html中直接写路径文件夹就行了,java脚本中需要加../ 等于现在全反了...我晕
我现在的问题比较诡异..在这个工程里面,有的路径符合以前的写法,有的则是相反的...我想要知道这是什么原因造成的 展开
myEclipse6.5GA + tomcat6.0本来运行很好的程序 突然路径全都出现错误...
比如 response.sendRedirect("../client/logon.jsp");
本来没问题的,但现在需要改成response.sendRedirect("client/logon.jsp");
还有图片路径也错误了
原来<td height="57" background="image/MB.png">
都需要改成 <td height="57" background="../image/MB.png">
这中间我没有改变过任何路径阿,image和client都在WebRoot路径下
这要是全都修改...工作量可就大了 我真是搞不明白为什么会出现这种变化啊? 我以前写路径基本上是在html中直接写路径文件夹就行了,java脚本中需要加../ 等于现在全反了...我晕
我现在的问题比较诡异..在这个工程里面,有的路径符合以前的写法,有的则是相反的...我想要知道这是什么原因造成的 展开
3个回答
展开全部
好了,你不用郁闷。也没有什么是诡异的!!
首先:html文件是不需要服务器端解析的,所以不用你管路径,但是tomcat是当前你在的地址开始找的,不是从/录下也就是不是从根目录下找的,所以你不能写目录让它去找,而是要考虑你要找的文件相对当前地址的路径,你可以在浏览器中查看当前地址。。。
还有就是你对服务器端跳转和客户端跳转没有完全理解的原因!!服务器端跳转后地址是不会变的,只有可客户端跳转的地址才会变!!
下面给你解释
打个比方:
你现在的路径是
http://localhost:8080/test/A.jsp
现在是A.jsp在你的根目录/中但是B.sp是在
/B/中,所以B.jsp在A.jsp的下一级目录中
你要跳转到
B/B.jsp
现在用两种方式
1:
request.getRequestDispatcher("B.jsp").forward(request,response);
因为是服务器端跳转,所以虽然执行的是B/B.jsp但是你的地址栏路径依然是
http://localhost:8080/test/A.jsp
那么也就意味着你现在的所有文件依然是在/目录中查找。
2:
但是如果你你在A.jsp中用response.sendRedirect("B/B.jsp"),那么你的地址栏地址是http://localhost:8080/test/B/B.jsp
那么也就意味着你现在要找文件的话都是从/B目录中开始.所以用不同的方式转会存在不同的路径问题.
现在假如你的目录结构为
/A.jsp
/B/B.jsp
/client/login.jsp
假设你是由A-->B-->login.jsp跳转的话假设B中用的是response.sendRedirect()方法
那么在A.jsp中如果你用第一种跳转方式的话就B.jsp中就要是response.sendRedirect("client/login.jsp");
因为此时的寻找地址是在/目录中,而client就在/目录中,所以一进去就找到了login.jsp
但是如果你在A.jsp中用的是客户端跳转方式也就是第二种方式的话B.jsp中你就要写为
response.sendRedirect("../client/login.jsp");
因为此时的地址栏地址应该是地址是http://localhost:8080/test/B/B.jsp
也就意味着你的开始寻址位置是/B中,但是client不在B中,所以要往上一层才找到client目录,进去以后才找到login.jsp
同样的目录结构但是要根据实际地址找地址,就像找人一样
常见的超链接也是客户端跳转,你都用html的话当然也就不存在服务器端跳转,也就不存在路径的复杂问题,以后你要是用servlet开发,或者相关的mvc架构都有这个问题.
还有不同的服务器也会有不同的路径解析方式,以后你可以试试用weblogic就会发现!!
具体的服务器端跳转和客户端跳转我就不说了,你自己搞定
希望对你有帮助
QQ405266926
首先:html文件是不需要服务器端解析的,所以不用你管路径,但是tomcat是当前你在的地址开始找的,不是从/录下也就是不是从根目录下找的,所以你不能写目录让它去找,而是要考虑你要找的文件相对当前地址的路径,你可以在浏览器中查看当前地址。。。
还有就是你对服务器端跳转和客户端跳转没有完全理解的原因!!服务器端跳转后地址是不会变的,只有可客户端跳转的地址才会变!!
下面给你解释
打个比方:
你现在的路径是
http://localhost:8080/test/A.jsp
现在是A.jsp在你的根目录/中但是B.sp是在
/B/中,所以B.jsp在A.jsp的下一级目录中
你要跳转到
B/B.jsp
现在用两种方式
1:
request.getRequestDispatcher("B.jsp").forward(request,response);
因为是服务器端跳转,所以虽然执行的是B/B.jsp但是你的地址栏路径依然是
http://localhost:8080/test/A.jsp
那么也就意味着你现在的所有文件依然是在/目录中查找。
2:
但是如果你你在A.jsp中用response.sendRedirect("B/B.jsp"),那么你的地址栏地址是http://localhost:8080/test/B/B.jsp
那么也就意味着你现在要找文件的话都是从/B目录中开始.所以用不同的方式转会存在不同的路径问题.
现在假如你的目录结构为
/A.jsp
/B/B.jsp
/client/login.jsp
假设你是由A-->B-->login.jsp跳转的话假设B中用的是response.sendRedirect()方法
那么在A.jsp中如果你用第一种跳转方式的话就B.jsp中就要是response.sendRedirect("client/login.jsp");
因为此时的寻找地址是在/目录中,而client就在/目录中,所以一进去就找到了login.jsp
但是如果你在A.jsp中用的是客户端跳转方式也就是第二种方式的话B.jsp中你就要写为
response.sendRedirect("../client/login.jsp");
因为此时的地址栏地址应该是地址是http://localhost:8080/test/B/B.jsp
也就意味着你的开始寻址位置是/B中,但是client不在B中,所以要往上一层才找到client目录,进去以后才找到login.jsp
同样的目录结构但是要根据实际地址找地址,就像找人一样
常见的超链接也是客户端跳转,你都用html的话当然也就不存在服务器端跳转,也就不存在路径的复杂问题,以后你要是用servlet开发,或者相关的mvc架构都有这个问题.
还有不同的服务器也会有不同的路径解析方式,以后你可以试试用weblogic就会发现!!
具体的服务器端跳转和客户端跳转我就不说了,你自己搞定
希望对你有帮助
QQ405266926
展开全部
response.sendRedirect("../client/logon.jsp");
这么写本身就有问题吧,这取决于请求来的位置,如果请求从A来的,那么相对A..,即取上一层,如果是从B来的就对B去上一层,所以你这个是有风险的。
一般都response.sendRedirect("/工程/文件夹/xx.jsp");
会比较保险吧。 我的理解,楼主觉得呢。
这么写本身就有问题吧,这取决于请求来的位置,如果请求从A来的,那么相对A..,即取上一层,如果是从B来的就对B去上一层,所以你这个是有风险的。
一般都response.sendRedirect("/工程/文件夹/xx.jsp");
会比较保险吧。 我的理解,楼主觉得呢。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是不是你的myEclipse没有给你刷新啊?右键刷新看看,还是不行的话,从新导入项目。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询