温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JavaWeb重定向和请求转发怎么实现

发布时间:2022-09-26 14:10:08 来源:亿速云 阅读:96 作者:iii 栏目:开发技术

这篇文章主要介绍“JavaWeb重定向和请求转发怎么实现”,在日常操作中,相信很多人在JavaWeb重定向和请求转发怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaWeb重定向和请求转发怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

JavaWeb重定向和请求转发怎么实现

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

JavaWeb重定向和请求转发怎么实现

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

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

请求转发:利用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后,点击超链接,控制台输出:

JavaWeb重定向和请求转发怎么实现

可以看出, 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为重定向的地址。

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

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

JavaWeb重定向和请求转发怎么实现

具体的区别体现在:

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

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

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

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

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

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

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

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

到此,关于“JavaWeb重定向和请求转发怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI