Servlet路径跳转 重定向与内部跳转的区别

本篇博客中的url-pattern标签

<url-pattern>/hs</url-pattern>

一、前端界面中

1.使用相对路径访问

index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <a href="hs">相对路径访问Servlet</a>
  </body>
</html>

a标签的目标地址中的内容与web.xml中url-pattern标签中的映射地址一致,但最前面不加/

错误情况:最前面加上 /

若把目标地址前面加上/

<a href="/hs">访问Servlet</a>

点击链接之后会显示404
在这里插入图片描述
地址栏中的地址说明正在访问服务器下的hs,明显是错误的
此处,第一个/表示服务器的根目录
PS:url-pattern处必须以/开头,这里的/表示项目的跟目录

2.使用绝对路径访问

使用request.getContextPath(),表示项目的跟目录

index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    <a href="/hs">相对路径访问Servlet</a><br>
    <a href= "<%=request.getContextPath()%>/hs">绝对路径访问Servlet</a>
  </body>
</html>
表单中action的url地址写法与超链接方式完全相同

二、Servlet中的路径跳转

以httpServlet的doGet方法跳转到test.jsp为例
在这里插入图片描述

1.重定向方式

doGet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
        response.sendRedirect(request.getContextPath()+"/test.jsp");
    }

使用request.getContextPath()获得上下文对象

2.服务器内部跳转

doGet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
        request.getRequestDispatcher("/test.jsp").forward(request,response);
    }
}

这里的/表示项目的根目录

错误情况:路径直接"text.jsp"

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
        response.sendRedirect("test.jsp");
    }

或者

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
        request.getRequestDispatcher("test.jsp").forward(request,response);
    }
}

都无法正确跳转,因为相对路径中直接写test.jsp说明当前文件与test.jsp在同一目录下,显然是错误的

三、重定向与内部跳转的区别

重定向内部跳转
也称外部跳转,是第一次请求后,服务器端向客户端发送了一个响应response告诉客户端一个新的请求地址,于是客户端以这个新地址为目标地址发出第二次request请求,此时的request对象已经不是第一次请求的request对象了,所以无法获取到第一次请求里的参数和属性。通过服务器将请求转发到另外的页面或者servlet中,此时跳转到的目标页面或者servlet可以仍可获取到请求对象、请求中的属性、参数。
地址栏url会发生变化地址栏url不会发生变化
可以跳转到工程以外的jsp或者servlet无法跳转到工程以外的jsp或者servlet
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值