转发和重定向

转发和重定向

1.转发

1.1什么是转发?

​ 一个web组件将未完成得处理交给另外一个web组件继续做,web组件指得是jsp或者servlet,常见得场景是一个servlet获取处理结果之后交给一个jsp来展示。

1.2如何转发?

绑定数据到request对象:

​ 1.通过HttpServletRequest提供得方法setAttribute(string name,object obj),

​ name:一般称为绑定名 obj:一般称为绑定值

​ 2.通过httpservletRequest提供得方法getAttribute(string name),name:绑定名(通过绑定名可以获取绑定得值)。

1.3获取转发器

RequestDispatcher rd=req.getRequestDispatcher(String url); url:转发得地址

RequestDispatcher是一个接口,该方法返回一个符合该接口要求得对象,我们称之为转发器;

转发得本质就是一个web组键通过转发器通知容器(tomcat)去调用另外一个web组键;

1.4转发的特点

1.转发之后,浏览器地址栏不会发生改变

2.转发只创建了一个req和res;

3.转发得目的地址是有限得,要求是一个应用中得某个组件得地址;

1.5转发原理图

在这里插入图片描述

1.6代码演示
web.xml配置文件
	<servlet>
 		<servlet-name>atteribute</servlet-name>
 		<servlet-class>web.DemoAttribute</servlet-class>
 	</servlet>
 	
 	<servlet-mapping>
 		<servlet-name>atteribute</servlet-name>
 		<url-pattern>/att</url-pattern>
 	</servlet-mapping>
Servlet(业务层)
public class DemoAttribute extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		String name="admin";
		//通过HttpServletRequest进行数据绑定
		req.setAttribute("username",name);
		
		//获取转发器
		RequestDispatcher rd=req.getRequestDispatcher("demo.jsp");
		
		//转发
		rd.forward(req,res);
	}
}

转发后的页面Demojsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<%=request.getAttribute("username") %>
</body>
</html>
结果

在这里插入图片描述

当我们在地址栏输入att地址,回车后,会得到业务层request所绑定的值。

2.重定向

2.1什么是重定向?

​ 重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置.

2.2转发原理图

在这里插入图片描述

2.3代码演示

与转发代码几乎相同,不同的是在业务层,转发用的是转发方式,重定向用的是重定向的方式。(有点废话)

public class DemoAttribute extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		String name="admin";
		//通过HttpServletRequest进行数据绑定
		req.setAttribute("username",name);
		
		
		//HttpServletResponse提供了方法sendRedirect(String url);
		//url重定向的地址
		//res.sendRedirect("demo.jsp");
	}
}
转发后的demo.jsp页面

在这里插入图片描述

从结果可以看出重定向无法获取业务层所绑定的值,并且地址也发生了变化,转发还是att,但是重定向变成了demo.jsp

3.总结

转发和重定向得区别:

  • 1.数据绑定和数据获取转发可以,而重定向不可以
  • 2.转发只访问一次服务器(一次请求)创建了一个resquest和response,而重定向访问了两次服务器
  • (两次请求)创建了两个request和response;
  • 3.转发得地址栏不会发生变化而重定向地址栏会发生变化也就是最后一次请求地址。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值