jsp 跳转问题

 
  
问: 今天似乎出现灵异事件了...

myEclipse6.5GA + tomcat6.0本来运行很好的程序 突然路径全都出现错误...

比如 response.sendRedirect("../client/logon.jsp");
本来没问题的,但现在需要改成response.sendRedirect("client/logon.jsp");
还有图片路径也错误了 
原来
都需要改成 
这中间我没有改变过任何路径阿,image和client都在WebRoot路径下
这要是全都修改...工作量可就大了  我真是搞不明白为什么会出现这种变化啊? 我以前写路径基本上是在html中直接写路径文件夹就行了,java脚本中需要加../ 等于现在全反了...我晕
我现在的问题比较诡异..在这个工程里面,有的路径符合以前的写法,有的则是相反的...我想要知道这是什么原因造成的

 
  
答:好了,你不用郁闷。也没有什么是诡异的!! 
首先: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就会发现!! 
具体的服务器端跳转和客户端跳转我就不说了,你自己搞定 
希望对你有帮助

你可能感兴趣的:(JSP,jsp)