路径问题分为两种一种是客户端路径,一种是服务端路径,下面分别来介绍
1.客户端
在进行客户端跳转和服务器端跳转时,都需要指定目标资源的URL,
如果这个路径以“”开始。在客户端跳转当中“”代表的是应用服务器根目录,即“http://localhost:8080/”,
response.sendRedirect("")
以上这些属于客户端路径,其中“/”为http://localhost:8080,“/”后面需跟项目名以及资源路径
2.服务器端
而在服务器端跳转当中代表的是应用程序根目录,即“http://localhost:8080/项目名/”
request.getRequestDispatcher("/xxx").forward()
其中“/”为项目根目录,比如http://loaclhost:8080/projectName,“/”后面只需要跟项目根目录下资源路径即可
两者区别
1.redirect 方式可以跨应用访问,forward 只能在同一个应用中跳转。
2.forward 客户端访问服务器,服务器找到要跳转的相应URL并执行返回给客户端。客户端的地址栏显示的是原始URL。
redirect 客户端访问服务器,服务器找到要跳转的URL并将URL发给客户端,再由客户端对新的URL重新发送请求。客
户端的地址栏显示的是第二次请求的URL。
3.数据的传输:在request中的数据,forward可以访问,redirect不行,因为redirect已经是一个新的请求。
相对路径的理解:
forward中"/"相对于web应用.
从http://localhost:8080/Test/gw/page.jsp中转发
<jsp:forward page="OtherPage.jsp"/>在JSP页面被解析后转换成pageContext.forward("OtherPage.jsp");
"/OtherPage.jsp"提交到http://localhost:8080/Test/OtherPage.jsp
"OtherPage.jsp"提交到http://localhost:8080/Test/gw/OtherPage.jsp
<form action="/ddd"> 和 response.sendRedirect("/ddd"); 相对于服务器根路径.
假设转发代码包含于注册的servlet-url为/ggg/tt;jsp为/ggg/tt.jsp:
绝对路径:response.sendRedirect("http://www.brainysoftware.com")发送http://www.brainysoftware.com
根路径:response.sendRedirect("/ooo")发送至http://localhost:8080/ooo
相对路径:response.sendRedirect("ooo")发送至http://localhost:8080/Test/ggg/ooo,