1.请求重定向:是客户端的行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变,一次新的转发。

2.请求转发:是服务器的行为,request.getRequestDispatcher(.jsp).forward(request,response)试一次请求,转发后请求对象会保存,地址栏的URL地址不会改变,还是上一次请求。

理解:

例子:

例如一个表单login.jsp,把表单的内容提交给response.jsp,在response.jsp里面做一次请求重定向和请求转发给request.jsp

login.jsp

<%@ page language="java" import="java.util.*"
contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'login.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<h1>用户注册</h1>
<hr>
<form action="response.jsp" name="regForm" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" />
</td>
</tr>
<tr>
<td>爱好:</td>
<td>
<input type="checkbox" name="favorite" value="read" />读书
<input type="checkbox" name="favorite" value="music" />音乐
<input type="checkbox" name="favorite" value="movie" />电影
<input type="checkbox" name="favorite" value="internet" />上网
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"></td>
</tr>
</table>
</form>
<a href = "request.jsp?username=张三" >URL传参</a>
</body>
</html>

reponse.jsp

<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8" %>
<%
response.setContentType("text/html;charaset=utf-8");//设置响应的MIME类型
out.println("<h1>response内置对象</h1>");
//out.flush();
PrintWriter outer = response.getWriter();
outer.println("response的输出流");
//请求重定向
//response.sendRedirect("request.jsp");
//请求转发
request.getRequestDispatcher("request.jsp").forward(request,response);
%>

request.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'login.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<h1>request内置对象</h1>
<%
request.setCharacterEncoding("utf-8");
%>
<% request.setAttribute("password","123465");%>
用户名<%=request.getParameter("username") %><br>
爱好<%
if(request.getParameterValues("favorite")!=null){
String[] favorites = request.getParameterValues("favorite");
for(int i = 0;i<favorites.length;i++){
out.println(favorites[i]+"&nbsp;&nbsp");
}
}
%>
<hr>
<%=request.getAttribute("password")%><br>
获取请求体的MIME类型:<%=request.getContentType()%><br>
返回请求用的协议类型以及版本号: <%=request.getProtocol()%><br>
返回接受请求的服务器主机名: <%=request.getServerName()%><br>
服务器端口号 :<%=request.getServerPort()%><br>
返回的编码格式 :<%=request.getCharacterEncoding()%><br>
请求文件的长度 :<%=request.getContentLength()%><br>
请求客户端的IP地址 <%=request.getRemoteAddr()%><br>
请求的真实路径: <%=request.getRealPath("request.jsp")%><br>
请求的上下文路径: <%=request.getContextPath()%><br> </body>
</html>

结果,请求转发的

可以看到对象有被保存,并且URL没有改变

请求重定向

可以看到对象没有被保存,并且URL发生了改变

最新文章

  1. 第4月第2天 nsinvocation崩溃 mvc videotrack
  2. Alpha阶段第一次Scrum Meeting
  3. Java实现MySQL数据库备份(二)
  4. DATE 日期格式
  5. ajax无刷新上传图片
  6. 【JWPlayer】官方JWPlayer去水印步骤
  7. Perform Cut Copy Paste Operations Using Cut_Region Copy_Region Paste_Region Commands In Oracle Forms
  8. ylbtech-dbs:ylbtech-7,welfareSystem(福利发放系统)
  9. Django自定义模型(model)中的字段标签
  10. jquery加入购物车飞入的效果
  11. Java IO (4) - Writer
  12. 实例源码--Android自定义Gallery动画效果
  13. APUE读书笔记-第17章-高级进程间通信
  14. codeforces 22C System Administrator(构造水题)
  15. Lua 数据类型和 Redis 数据类型之间转换
  16. OpenCV探索之路(二十八):Bag of Features(BoF)图像分类实践
  17. 《Java从入门到精通》学习总结4
  18. Vipe框架构思记
  19. Node学习笔记(二)
  20. How to: Display a Non-Persistent Object&#39;s List View from the Navigation

热门文章

  1. Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析
  2. z-Tree-checkbox
  3. rsyslog管理分布式日志
  4. web 直播&amp;即时聊天------阿里云、融云
  5. JUnit之断言assert
  6. JSONObjec序列化对象过滤为null的属性
  7. php实现批量修改文件名称
  8. 通过demo学python
  9. Flume简介及安装
  10. Some 3D Graphics (rgl) for Classification with Splines and Logistic Regression (from The Elements of Statistical Learning)(转)