一、页面跳转分为两种形式
1、服务器内部跳转
客户端只发出一次请求,服务器内部进行跳转的时候会把这个请求往下传递,客户端浏览器的地址栏中显示的是第一次访问的那个
有二种代码实现方式:
//跳转到一个页面的情况
String page = "/success.html";
//跳转到另一个servlet的情况
String page = "CheckServletTest";
//获得一个服务器内部跳转的对象
RequestDispatcher rd = request.getRequestDispatcher(page);
//进行服务器内部跳转并且把request和response进行传递
rd.forward(request, response);
rd.include(request,response);//包含
标红的两个方法等价,只是包含会把上个页面的输出信息也输出到当前页面中。
2、客户端重定向(redirect)
servlet每次执行客户端重定向操作都会重新发一个请求这个效果相当于拿着重定向代码中那个资源路径到浏览器里面重新写一个地址然后按回车发新请求去访问
浏览器中的地址是重定向后的那个资源路径
//重定向到另一个servlet
String page = "CheckServletTest";
//重定向到另一个页面
String page = "success.html";
//执行重定向方法
response.sendRedirect(page);
二、servlet跳转的路径问题
1、相对路径
后台:相对于项目名(servlet)
前台:
web.xml:/相对于项目名
./login/login.html 和login/login.html是等价的都是当前目录下寻找
对于前台servlet跳转到另一个页面或另一个servlet时,
例子:
前提:
WebRoot下面有test目录,test目录里面有俩个页面
pathA.html和pathB.html
pathA.html里面有一个超链接,用相对路径连接到pathB.html页面
直接在地址栏中访问了一个servlet类(pathServletTest)
<servlet>
<servlet-name>path</servlet-name>
<servlet-class>com.briup.pathServletTestt</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>path</servlet-name>
<url-pattern>/servlet/PathServletTest</url-pattern>
</servlet-mapping>
http://127.0.0.1:8002/jd1311_servlet/servlet/PathServletTest
然后这个servlet中进行了一个服务器内部跳转到pathA.html页面
这个时候有以下分析:
pathA.html的当前路径:
http://127.0.0.1:8002/jd1311_servlet/servle 后台:相对于项目名(servlet) 如果你配的<url-pattern>有两个/他只会消除一个/路径名就是在项目名的基础上还要加省去一个/的<url-pattern>
需要访问的资源路径是:
http://127.0.0.1:8002/jd1311_servlet/test/pathB.html
当前路径需要这样变化才能达到需要的路径:
../
http://127.0.0.1:8002/jd1311_servlet/
../test
http://127.0.0.1:8002/jd1311_servlet/test
../test/pathB.html
http://127.0.0.1:8002/jd1311_servlet/test/pathB.html
所以最终在这样的情况下,pathA.html超链接里面的相对
路径应该写这样:
../test/pathB.html
2、绝对路径
以/开头的路径
/代表什么路径的问题
这个/指的时候路径中的最前面的那个/,后面的如果再出
现/,那么这个/就是路径于路径之间的分割
比如: servlet/test/loginServletTest
首先这是相对路径,里面的俩个/都是路径分隔符
出现的第一个/就是我们所有描述的/的代表路径问题,后
面的其他/都是路径的分隔符
1 页面代码中的路径前面/代表地址栏中端口号后面的/
2 后台代码中的/分为俩类:
a.服务器内部跳转的时候路径前面的/代表地址栏中的项
目名字后面的/
b.客户端重定向中的路径前面的/代表的时候地址栏中的
端口号后面的/
3 web.xml里面配置的<url-pattern>标签中的/代表的是
地址栏中项目名字后面的/