Web编程-请求转发和重定向

Servlet处理完数据后进行页面跳转的两种主要方式。

----重定向
----请求转发

一.重定向

重定向是指页面重新定位到某个新地址
之前的请求Request失效,进入一个新的请求
跳转后浏览器地址栏内容将变为新的指定地址
重定向是通过HttpServletResponse对象的sendRedirect( )来实现,
该方法用于生成302响应码和Location响应头,
从而通知客户端去重新访问Location响应头中指定的URL
相当于浏览器重新发送一个请求
方法:
pubilc void sendRedirect(java.lang.String location)

二.请求转发

请求转发是指将请求再转发到另一资源(一般为JSP或Servlet)。
此过程依然在同一个请求范围内,转发后浏览器地址栏内容不变
请求转发使用RequestDispatcher接口中的forward()方法来实现,
该方法可以把请求转发到另外一个资源,
并让该资源对浏览器的请求进行响应
方法:
RequestDispatcher rd = request.getRequestDispatcher(path);
rd.forward(request,response);

三.重定向和请求转发的区别

(1).forward()只能将请求转发给同一个Web应用中的组件,
sendRedirect方法不仅可以重定向到当前应用程序中的其他资源,
还可以重定向到其他站点的资源。

(2).sendRedirect()方法重定向的访问过程结束后,
浏览器地址栏中显示的URL会发生改变,
由初始的URL地址变成重定向的目标URL;
而调用forward()方法的请求转发过程结束后,
浏览器地址栏保持初始的URL地址不变。

(3).forward()方法的调用者与被调用者之间共享相同的request对象和response对象;
而sendRedirect()方法调用者和被调用者使用各自的request对象和response对象,
它们属于两个独立的请求和响应过程。
重定向流程图:在这里插入图片描述
请求转发流程图:

在这里插入图片描述

四.代码实现

1.重定向
public class RedirectServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		request.setAttribute("test","helloworld");
		response.sendRedirect(request.getContextPath() + "/myservlet");
	}
}
2.请求转发
public class ForwardServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		request.setAttribute("test","helloworld");
		PrintWriter out = response.getWriter();
		RequestDispatcher rd = request.getRequestDispatcher("/myservlet");
		rd.forward(request, response);
	}
}
目标servlet类
public class MyServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 设置响应到客户端的文本类型为HTML
		response.setContentType("text/html; charset=UTF-8");
		// 获取输出流
		PrintWriter out = response.getWriter();
		String test =(String)request.getAttribute("test");
		out.println("重定向和请求转发");
		out.println(test);
	}
}
重定向:

在这里插入图片描述

请求转发:

在这里插入图片描述

参考:https://blog.csdn.net/naruhina/article/details/90139298

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司马道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值