更新时间:2021-09-06 12:34:47 来源:极悦 浏览949次
请求转发: xxServlet收到请求,然后直接转发给yyServlet,然后yyServlet返回给客户端。整个过程中,客户端发出一个请求,收到一个响应。
重定向:xxServlet收到请求,然后发出一个响应给客户端,客户端立即又发送一个请求访问xxServlet中给的URL,即yyServlet的路径,然后yyServlet给客户端一个响应。整个过程中,客户端发出两个请求,收到两个响应。
请求转发:利用RequestDispather接口中的forward方法实现请求转发。
请求重定向:利用HttpServletResponse的sendRedirect方法实现请求重定向。
(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)请求重定向
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为重定向的地址。
本质区别:请求的转发只发出了一次请求,而重定向则发出了两次请求。在浏览器的开发工具中可以看到请求的次数:
具体的区别体现在:
(1)请求的转发:地址栏是初次发出请求的地址。
请求的重定向:地址栏不是初次发出请求的地址,为最后响应的地址。
(2)请求转发:在最终的Servlet中,request和中转的那个request是同一个对象。
请求的重定向:在最终的Servlet中,request和中转的那个request不是同一个对象。
(3)请求转发:只能转发给当前web应用的资源。
请求的重定向:可以重定向到任何资源。
(4)请求的转发:/代表的是当前web应用的根目录。
请求的重定向:/代表的是当前web站点的根目录。
以上就是极悦小编介绍的"JavaWeb重定向和请求的转发",希望对大家有帮助,想了解更多可查看JavaWeb教程。极悦在线学习教程,针对没有任何Java基础的读者学习,让你从入门到精通,主要介绍了一些Java基础的核心知识,让同学们更好更方便的学习和了解Java编程,感兴趣的同学可以关注一下。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习