javaweb之请求的转发和重定向
1.什么是请求转发和请求重定向?

请求转发: xxServlet收到请求,然后直接转发给yyServlet,然后yyServlet返回给客户端。整个过程中,客户端发出一个请求,收到一个响应。

重定向:xxServlet收到请求,然后发出一个响应给客户端,客户端立即又发送一个请求访问xxServlet中给的URL,即yyServlet的路径,然后yyServlet给客户端一个响应。整个过程中,客户端发出两个请求,收到两个响应。
2. 请求转发和请求重定向的实现方法
请求转发:利用RequestDispather接口中的forward方法实现请求转发。
请求重定向:利用HttpServletResponse的sendRedirect方法实现请求重定向。
2.1 请求转发
RequestDispather实例对象是由Servlet引擎创建的,它用于包装一个要被其他资源调用的资源,(例如Servlet,HTML文件,JSP文件等),并可以通过其中的方法将客户端的请求转发给所包装的资源。
示例代码如下:
forwardTest.html
<!DOCTYPE html>
<html>
<head>
<title>forwardTest.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
<a href="http://localhost:8080/MyWebProject/forwardServlet">forward</a>
</body>
</html>
forwardServlet.java
package forwardTest; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class forwardServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out=response.getWriter();
System.out.println("forwardServlet's doGet");
String path="testServlet";
//1.调用HttpServletRequest的getRequestDispatcher()方法,调用时需要传入转发的地址;
RequestDispatcher requestDispatcher=request.getRequestDispatcher(path);
//2.调用HttpServletRequest的forward(request,response)方法进行请求的转发;
requestDispatcher.forward(request,response);
}
}
testServlet.java
package forwardTest; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class testServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out=response.getWriter();
System.out.println("testServlet's doGet");
} }
运行forwardTest.html后,点击超链接,控制台输出:

可以看出, forwardServlet收到客户端的请求后,调用HttpServletRequest的getRequestDispatcher()方法,利用forward(request,response)方法进行请求转发,将请求直接转发给testServlet,testServlet将响应返回给客户端。达到了请求转发的目的。
2.2 请求重定向
redirectServlet.java
package forwardTest; import java.io.IOException;
//import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class redirectServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("redirectServlet's doGet");
String path="testServlet";
response.sendRedirect(path);
}
}
执行请求的重定向,直接调用response.sendRedirect(path)方法,path为重定向的地址。
3.请求的转发和重定向的区别
本质区别:请求的转发只发出了一次请求,而重定向则发出了两次请求。在浏览器的开发工具中可以看到请求的次数:


具体的区别体现在:
1.请求的转发:地址栏是初次发出请求的地址。
请求的重定向:地址栏不是初次发出请求的地址,为最后响应的地址。
2.请求转发:在最终的Servlet中,request和中转的那个request是同一个对象。
请求的重定向:在最终的Servlet中,request和中转的那个request不是同一个对象。
3.请求转发:只能转发给当前web应用的资源。
请求的重定向:可以重定向到任何资源。
4.请求的转发:/代表的是当前web应用的根目录。
请求的重定向:/代表的是当前web站点的根目录。
wx搜索“程序员考拉”,专注java领域,一个伴你成长的公众号!

javaweb之请求的转发和重定向的更多相关文章
- jsp:和属性相关的方法,请求的转发,重定向
jsp中与属性相关的方法: 方法: void setAttribute(String name, Object o): 设置属性 Object getAttribute(String name):获取 ...
- 域对象的作用范围 & 请求的转发和重定向
1. 和属性相关的方法: ①. 方法 void setAttribute(String name, Object o): 设置属性 Object getAttribute(String name): ...
- javaWEB总结(14):请求的转发和重定向
通俗理解请求转发与重定向的流程 通俗的来讲:我们可以把请求转发和重定向当成是一种借钱的情景模式. (1)请求的转发:A向B借钱,B自己没有钱,但是向C借到了钱,并且把钱借给了A.A只向B请求了一次. ...
- JavaWEB - 请求的转发和重定向
JavaWEB - Servlet
- 2017.3.31 spring mvc教程(六)转发、重定向、ajax请求
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- servlet请求转发于重定向
请求的转发与重定向是Servlet控制页面跳转的主要方法,在Web应用中使用非常广泛. 一. 请求的转发 Servlet接收到浏览器端请求后,进行一定的处理,先不进行响应,而是在服务器端内部" ...
- SpringMVC中使用forward和redirect进行转发和重定向以及重定向时如何传参详解
转自:http://blog.51cto.com/983836259/1877188 2016-11-28 09:45:59 如题所示,在SpringMVC中可以使用forward和redirec ...
- JavaWeb中请求转发和请求重定向的区别
针对于JavaWeb中请求与重定向的一个cheatsheep: 1.转发 1)完成一次转发,用户浏览器发送一次请求 2)转发之后,浏览器URL地址栏不改变(服务器帮忙完成) 3)请求域中数据不丢失 4 ...
- javaweb之Servlet,http协议以及请求转发和重定向
本文是作者原创,版权归作者所有.若要转载,请注明出处. 一直用的框架开发,快连Servlet都忘了,此文旨在帮自己和大家回忆一下Servlet主要知识点.话不多说开始吧 用idea构建Servlet项 ...
随机推荐
- “全栈2019”Java第七十九章:类中可以嵌套接口吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- TCP/IP学习笔记(3)-IP、ARP、RARP协议
这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数据 ...
- java 数字转 字符串 互相转换
各种数字类型转换成字符串型: String s = String.valueOf( value); // 其中 value 为任意一种数字类型. 字符串型转换成各种数字类型: String ...
- [redis] 数据特性简单实验
位图 由bit位组成的数组,实际的底层数组类型是字符串,而字符串的本质是二进制大对象,所以将其视作位图,位图存储的是boolean指,一定程度上可以减少存储空间. -- 设置位图指定偏移量的比特位的值 ...
- esp_err_t esp_event_loop_init(system_event_cb_t cb, void *ctx);
esp_err_t esp_event_loop_init(system_event_cb_t cb, void *ctx){ if (s_event_init_flag) { return ESP_ ...
- js获取字符串字节的位数
ifSubUser.getBlength = function(str){ ;i--;){ n += str.charCodeAt(i) > ? : ; } return n; }
- 关于cg语言中求法向量 N=mul(worldMatrix_IT,normal); 的随笔
解释一下标题,N是变换到世界坐标后的法向量,worldMatrix_IT是变换矩阵worldMatrix的逆的转置矩阵,normal就是模型坐标的法向量. 对于点p,我们根据变换矩阵M(即worldM ...
- pip升级最新版本
1.如果是python2.7输入以下指令 python -m pip install --upgrade pip 2.如果是python 3.+输入以下指令 python3 -m pip instal ...
- C# Stopwatch 类
命名空间:System.Diagnostics Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 Stopwatch 方案中,先调用 Start 方 ...
- spring线程池ThreadPoolTaskExecutor与阻塞队列BlockingQueue
一: ThreadPoolTaskExecutor是一个spring的线程池技术,查看代码可以看到这样一个字段: private ThreadPoolExecutor threadPoolExecut ...