专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Java Web请求转发和重定向详解

Java Web请求转发和重定向详解

更新时间:2020-10-22 17:49:05 来源:赢咖4 浏览745次


Java Web,是用Java技术来解决相关Web互联网领域的技术栈,而Web包括:Web服务端和Web客户端两部分。说到服务端和客户端我们就不得不说到Java Web请求转发和重定向,那么什么是javaweb请求转发和请求重定向?

image.png


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

image.png


Javaweb重定向:xxServlet收到请求,然后发出一个响应给客户端,客户端立即又发送一个请求访问xxServlet中给的URL,即yyServlet的路径,然后yyServlet给客户端一个响应。整个过程中,客户端发出两个请求,收到两个响应。


1. 请求转发和请求重定向的实现方法

请求转发:利用RequestDispather接口中的forward方法实现请求转发。

请求重定向:利用HttpServletResponse的sendRedirect方法实现请求重定向。


1.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将响应返回给客户端。达到了请求转发的目的。


1.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为重定向的地址。


2.请求的转发和重定向的区别

本质区别:请求的转发只发出了一次请求,而重定向则发出了两次请求。在浏览器的开发工具中可以看到请求的次数:

具体的区别体现在:

1.请求的转发:地址栏是初次发出请求的地址。

请求的重定向:地址栏不是初次发出请求的地址,为最后响应的地址。


2.请求转发:在最终的Servlet中,request和中转的那个request是同一个对象。

请求的重定向:在最终的Servlet中,request和中转的那个request不是同一个对象。


3.请求转发:只能转发给当前web应用的资源。

请求的重定向:可以重定向到任何资源。


4.请求的转发:/代表的是当前web应用的根目录。

请求的重定向:/代表的是当前web站点的根目录。


总的来说,Java Web请求转发和重定向还是有着很大的区别的,本质就在于发出的请求次数不同。但请求转发和重定向都是Java Web中不可或缺的机制,大大方便了服务端和客户端的交互工作。在本站的Java Web教程中还有许多实例来论证重定向和请求转发机制的关系和差异,感兴趣的小伙伴可以去观看学习。


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>