绝对路径:放之四海而皆准的路径。
相对路径:相对于当前资源的路径。
在JSP页面分别使用相对路径和绝对路径进行页面跳转
<!-- 使用相对路径访问HelloServlet -->
<!-- /servlet/HelloServlet 第一个/表示服务器根目录 -->
<a href="/servlet/HelloServlet">访问Helloservlet!</a>
<hr>
<!-- 使用绝对路径访问HelloServlet,可以使用Path:表示项目的根目录 -->
<a href="<%=path%>/servlet/HelloServlet">访问Helloservlet!</a> //经过测试可以
<hr>
<a href="servlet/TestServlet">访问TestServlet!</a>
在Servlet类中进行页面跳转
/*
* 请求重定向方式跳转到test.jsp,
* 当前路径是 项目名/所属Servlet包名/
*/
// 使用request.getContextPath()获得上下文对象(/ServletPathDirection)
response.sendRedirect(request.getContextPath()+"/test.jsp");
//服务器内部跳转,这里的斜线表示项目的根目录 /test.jsp与../test.jsp跳转效果一致
//request.getRequestDispatcher("../test.jsp").forward(request, response);
//RequestDispatcher跳转到对应jsp时,../test.jsp 与/test.jsp同样能达到跳转左右
/*RequestDispatcher rd = request.getRequestDispatcher("../test.jsp");
rd.forward(request, response);*/
//跳转到项目根目录下的index.jsp,其中testInt为项目名称,index.jsp 为项目testInt\WebRoot\下的一个jsp页面。
String index = "/testInt/index.jsp";
response.sendRedirect(index);
在web.xml中路径写法
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<!-- 必须以/开头,这里的/表示项目的根目录 -->
<url-pattern>/servlet/HelloServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/servlet/TestServlet</url-pattern>
</servlet-mapping>
在Java Web开发中,经常会用到跳转页面的方法,一般会有两种方法:
HttpServletReponse response = new HttpServletResponse();
response.sendRedirect(location);
RequestDispatcher rd = new RequestDispatcher();
rd.forward(request,response);
1.跳转方式
http://localhost:8080/ServletPathDirection应用
运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何URL.
2.(运用RequestDispatcher接口的Forward)方法
forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以通过response.setAttribute("name",name)来传至下一个页面。
重定向后浏览器地址栏URL不变。
"/"代表相对于web应用路径
RequestDispatcher rd = request.getRequestDispatcher("/HelloServlet");
rd.forward(request,response); //提交至http://localhost:8080/ServletPathDirection/HelloServlet
RequestDispatcher rd = getServletContext().getRequestDispatcher("/HelloServlet");
rd.forward(request,response); //提交至http://localhost:8080/ServletPathDirection/HelloServlet
RequestDispatcher rd = getServletContext().getNamedDispatcher("HelloServlet");//HelloServlet为一个<servlet-name>
rd.forward(request,response); //提交至名为HelloServlet的Servlet
(运用HttpServletResponse接口的sendRedirect)方法
是在用户浏览器端工作,sendRedirect()可以带参数传递,比如servlt?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame的jsp文件
绝对路径:response.sendRedirect("http://www.baidu.com");//发送至http://www.baidu.com
根路径:response.sendredirect("/ServletPathDirection");//发送至http://localhost:8080/ServletPathDirection
相对路径:response.sendRedirection("HelloServlet"); //发送至http://localhost:8080/ServletPathDirection/HelloServlet
sendRedirect等同于此方式
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newPath/jsa.jsp";
response.setHeader("Location",newLocn);----------------------摘出来的,没有试验
3.使用response.sendRedirect()地址栏将改变
使用request.getRequestDispatcher().forwar(request,response)地址栏中的信息保持不变
4.request.setAttribute存东西
只用通过方法2跳转,才能在新页取出来