JavaWeb——请求转发与重定向

转发

主要对象和方法:

RequestDispatcher对象和它的forward方法

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="./DataServlet" method="get">
		<input type="text" name="username">
		<input type="password" name="password">
		<input type="submit" value="提交">
	</form>
</body>
</html>

DataServlet的主要代码

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setAttribute("request","1000");
		System.out.println(request.getParameter("username"));
		request.getRequestDispatcher("WEB-INF/a.jsp").forward(request, response);
	}

a.jsp文件代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
	<title>Insert title here</title>
</head>
	<body>
		<%=request.getAttribute("request")%>
		a.jsp
	</body>
</html>

点击提交

浏览器地址栏

不变

  • 使用转发的时候,浏览器的地址栏不会发生改变,但是响应的资源为转发的目的资源。
    点击提交后的结果,地址栏的资源仍然是DataServlet的路径,并没有显示a.jsp的路径。
    结果

请求范围

同一个Web应用当前项目,可以转发到WEB-INF目录下的资源

  • 请求只能转发到相同Web应用的项目资源,不可以跨应用或者服务器。
    把DataServlet中转发路径变为"http://www.baidu.com"无法正常访问。
    结果

请求过程

一次请求一次响应
这里是转发的是同一个请求,所以只有一次请求,一次响应。这里显示的值为“1000”说明确实是同一个请求。
结果

重定向

index.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="./DataServlet" method="get">
		<input type="text" name="username">
		<input type="password" name="password">
		<input type="submit" value="提交">
	</form>
</body>
</html>

DataServlet代码

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setAttribute("request","1000");
		System.out.println(request.getParameter("username"));
		response.sendRedirect("WEB-INF/a.jsp");
	}

a.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
	<title>Insert title here</title>
</head>
	<body>
		<%=request.getAttribute("request")%>
		a.jsp
	</body>
</html>

浏览器地址栏

改变
地址栏发生了改变,变成了重定向资源的路径。
地址栏发生改变

请求范围

可以跨Web应用和服务器来重新定位资源,但是不可以直接重定向到WEB-INF中的资源
这里可以看出来如果直接重定向到WEB-INF下的资源,将会无法访问。
结果
把DataServlet代码改成

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setAttribute("request","1000");
		System.out.println(request.getParameter("username"));
		response.sendRedirect("http://www.baidu.com");
	}

结果
状态码为307,location就是重定向的路径
在这里插入图片描述

请求过程

两次请求,两次响应
把DataServlet代码改成

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setAttribute("request","1000");
		System.out.println(request.getParameter("username"));
		response.sendRedirect("./b.jsp");
	}

结果
点击提交

结果

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值