response对象的转发和重定向

response对象的转发和重定向

转发(直接转发方式)(Forward)

客户端和浏览器之发出一次请求,Servelt、HTML/JSP或其他信息资源,由第二个信息资源响应改请求,在请求对象request中,保存的对象对于每个信息资源是共享的。

代码演示

创建info页面转接页面

body代码:

<body>
    <%
    	String userName = request.getParameter("userName");
    	String pwd = request.getParameter("pwd");
    	
    	if("admin".equals(userName) && "123456".equals(pwd)){
    		// 说明账号密码正确 跳转到成功登录页面,这个也叫重定向
    		// response从login.jsp页面来的
    		response.sendRedirect("success.jsp");
    	}else{
    		// 说明账号密码错误,重新跳转到登录页面,并且输出错误信息,这个也叫转发
    		// 传递msg错误信息过去
    		request.setAttribute("msg","密码错误");
    		request.getRequestDispatcher("login.jsp").forward(request,response);
    	}
    	
     %>
  </body>
创建login登录页面

body代码:

<body>
	<%
	// 接收传递过来msg的值
		String msg = (String) request.getAttribute("msg");
		if (msg == null)
			msg = "";
	%>
	<form action="info.jsp" method="post">
		用户名:<input type="text" name="userName" /><br> 密码:<input
			type="password" name="pwd" /><span style="color:red"><%=msg%></span><br>
		<input type="submit" value="登录" />
	</form>
</body>

部署打开登录页面login.jsp,随便输入错误的用户名和密码:

在这里插入图片描述

第一种理解方法

点击登录之后:
在这里插入图片描述
这个时候我们可以看到密码后面提示的密码错误,但是地址栏上面的是info.jsp,这个时候我们来看代码:
在这里插入图片描述
我们看黄色部分,密码输入错误的时候处理的是到login.jsp页面,但是地址栏上还是显示的info.jsp,这个就是response的转发,执行了跳转到另一个页面但是页面还是在info.jsp这个页面。

第二种理解方法

如果上一种不理解的话,那么来看这种方法:
新创建一个测试页面test.jsp我们只用来获取userName用户名和msg方法,body代码:

<body>
    <%
    String userName = request.getParameter("userName");
    	String msg = (String) request.getAttribute("msg");
		if (msg == null)
			msg = "";
     %>
     	用户名:<%=userName %><br>
  		msg:<%=msg %>
  </body>

然后把黄色部分改为test.jsp
在这里插入图片描述
在这里插入图片描述
这个时候再回到登录页面,随便输入错误的用户名和密码:
在这里插入图片描述
点击登录后跳转的页面:
在这里插入图片描述
地址栏里面的红色部分还是info.jsp,但是代码里面的是test.jsp,这个就是转发了,意思就是login登录页面只告诉info转接页面账号密码,然后info页面判断之后告诉别的页面要显示什么值,到最后login要的只是info页面的最终结果,不管info页面问哪个页面转发的值,也就是login只发出一次请求之后就不用管了。

转发(forward)举例说明

举个生活中的简单例子来说吧,有我,小红,小明三个人。我没钱了,想问小红借钱,小红知道之后问小明要了钱然后借给我了,这个时候我只知道是小红借给我钱了,到还钱的时候我只用还给小红就行了。我也不用管小红的钱咋来的,是自己的还是问别人借的,我只用知道还钱的时候我还给小红就行了。这就是借钱的时候之请求了一次小红,然后别的我就不用管了。在上述代码里面我就是login.jsp页面,小红就是info.jsp页面,小明就是test.jsp页面。带入一下意思就明了了。

这个就是response的转发,一共发出了一次请求。

重定向(间接转发方式)(Redirect)

间接转发方式(Redirect)实际上是两次请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。

代码演示

创建success登录成功页面

body代码:

<body>
   <h1>登录成功</h1>
  </body>

剩下代码参照直接转发方式(Forward)的代码,两个代码是一样的。

理解方法

打开登录页面,输入正确的用户名:admin和密码:123456
在这里插入图片描述
密码可以自行修改
在这里插入图片描述
登录之后
在这里插入图片描述
地址栏的页面是success.jsp登录成功的页面,这个等于一共发送了两次请求,分别为:
(1):输入账号密码后转接到info.jsp页面判断账号密码
(2):info.jsp页面返回一个success.jsp登录成功页面让login.jsp页面再次请求
请求成功后就跳转到success.jsp页面了。

重定向(redirect)举例说明

我们还拿我,小红,小明来举例子吧,还是借钱的例子。我问小红借钱,然后小红说他没钱了,但是他知道谁有钱,我问是谁,小红说小明有钱。然后我又去问小明借钱,最后借到了。然后这个钱我只用还给小明了,不用给小红了。这个我一共请求了两次,先请求小红借我钱,然后小红说让我去找小明,然后又请求小明借我钱。这个也带入到上述代码中我就是login.jsp页面,小红就是info.jsp页面,小明就是test.jsp页面。然后再带入一下就大概可以明白了。

这个就是response的重定向,一共发送了两次请求

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值