【Dongle】【Web】【JSP】重定向与转发
2017-02-12 21:56
274 查看
在学习网上商城的时候又遇到重定向和转发的学习,但是一直不是很清楚他们有什么用,今天偶然在慕课上学习JSP时,导师有讲了重定向和转发的作用及区别。
本质上等同于两次请求,前一次请求对象不会保存,地址栏的URL地址会改变
对象和response对象,这样挑战到下一个页面时,里面的数据也是可以获取的。
转发是一次请求,转发后请求对象会保存,地址栏URL地址不会改变。
通过response.jsp将test.jsp文件信息传递到request.jsp
我们通过实际是访问的response.jsp,现在变成了request.jsp对象,并且用户名和性别都是null。
通过转发,我们会发现地址栏的地址还是test.jsp要访问的地址,但是实际内容已经变成了request.jsp内容,并且这时候的reques.jsp里面可以接收到test.jsp里面的请求的数据。
是不是很神奇?期待您的交流~
请求重定向
属于客户端行为,使用的是response.sendRedirect(url)方法,参数url为要定向的链接。本质上等同于两次请求,前一次请求对象不会保存,地址栏的URL地址会改变
请求转发
属于服务器行为,request.getRequestDispatcher(url).forward(request,response),参数url也是要定向的链接,不过后面传递的是request对象和response对象,这样挑战到下一个页面时,里面的数据也是可以获取的。
转发是一次请求,转发后请求对象会保存,地址栏URL地址不会改变。
解释
重定向
假设一个人需要去A局盖章,但是A局说这个章需要B局去盖,然后让这个人自己出去到B局,然后再盖章。盖完章之后,如果他人问起去哪里盖章,这个人直接说去B局盖章,中间就没有了A局的事,然后就丢了到A局的信息,同时地址也就变成了B局的。转发
这个人到A局后,同样A局人员告诉他需要B局盖章。但是工作人员没有让他去B局,因为B局就在附近,工作人员打电话给B局人员,让他们送过来。然后这个人拿到了章。这时候若有人问起,他就会说去A局盖章,他们会处理好的。这个过程他不知道B局的信息,所以地址是不会改变的。代码
下面弄个小程序,进行下测试test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="en"> <head> <title>Document</title> </head> <body> <form name="regForm" action="response.jsp" method="post"> 用户: <input type="text" name="username" /></br> 性别: <select name="sex"> <option value="man">男</option> <option value="woman">女</option> </select> </br> <input type="submit" value="提交"/> </form> </body> </html>
request.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <h1>用户名:<%=request.getParameter("username") %><br></h1> <h2>性别:<%=request.getParameter("sex") %></h2>
通过response.jsp将test.jsp文件信息传递到request.jsp
重定向
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% response.sendRedirect("request.jsp"); %>
结果
我们通过实际是访问的response.jsp,现在变成了request.jsp对象,并且用户名和性别都是null。
转发
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% request.getRequestDispatcher("request.jsp").forward(request,response); %>
结果
通过转发,我们会发现地址栏的地址还是test.jsp要访问的地址,但是实际内容已经变成了request.jsp内容,并且这时候的reques.jsp里面可以接收到test.jsp里面的请求的数据。
是不是很神奇?期待您的交流~
相关文章推荐
- 【JavaWeb】简述 jsp 页面的工作原理以及请求转发和重定向的区别
- javaweb servlet转发,包含,重定向; jsp转发,包含
- JavaWeb-JSP 请求转发和请求重定向
- JavaWeb——JSP内置对象request,response,重定向与转发 学习总结
- JSP运行原理,三层机缘和转发与重定向
- 重定向和请求转发(摘自head first servlet and jsp)
- jsp/servlet中重定向和转发的区别
- java中web应用中重定向与转发的区别
- JSP中转发和重定向的区别
- jsp转发与重定向的区别
- Jersey实现JSP页面转发和重定向
- JSP转发和重定向的区别
- jsp重定向与转发的区别
- Java Web 重定向、转发之对比
- Java Web笔记 – 转发与重定向的区别与在FireBug客户端的表现
- 深入理解Servlet/JSP之“转发和重定向”
- JSP重定向和转发的区别
- JSP/Servlet转发与重定向的区别
- JSP-Servlet中转发(forward)与重定向(sendRedirect)的区别
- jsp转发和重定向的区别