Servlet路径跳转

绝对路径:放之四海而皆准的路径。

相对路径:相对于当前资源的路径。

在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跳转,才能在新页取出来


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值