• Servlet之重定向和请求转发



    提示:以下是本篇文章正文内容,Java系列学习将会持续更新

    一、重定向 (redirect)

    重定向,即response.sendRedirect(),是一种客户端行文,从本质上讲等同于两次请求,前一次请求对象不会保存,地址栏的URL地址会改变。在重定向的过程中,传输的信息会被丢失。

    当我去请求一个资源的时候,我可以要求浏览器去请求另一个资源。即:301永久性重定向302临时性重定向

    永久重定向:

    页面永久性移走(301重定向)是一种非常重要的 “自动转向” 技术。

    301重定向可促进搜索引擎优化效果。
     从搜索引擎优化角度出发,301重定向是网址重定向最为可行的一种办法。当网站的域名发生变更后,搜索引擎只对新网址进行索引,同时又会把旧地址下原有的外部链接如数转移到新地址下,从而不会让网站的排名因为网址变更而收到丝毫影响。同样,在使用301永久性重定向命令让多个域名指向网站主域时,亦不会对网站的排名产生任何负面影响。

    临时重定向:

    用 GET 和 POST 两种请求方法:

    DOCTYPE html>
    <html lang="zh-hans">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
        <form method="get" action="/redirect">
            <button>提交button>
        form>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    测试重定向时用哪种方法:

    @WebServlet("/redirect")
    public class Redirect extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            redirect(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            redirect(req, resp);
        }
    
        private void redirect(HttpServletRequest req, HttpServletResponse resp) {
            resp.setStatus(307);
            resp.setHeader("Location", "/target");  // 由于没有实现,结果会是 404
            // 看看重定向时到底是哪种方法?
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    结论:

    状态码效果
    302GET和POST方法都可以重定向
    303退化成GET请求重定向
    307保留原方法。使用GET/POST,要看原方法是哪种

    回到目录…

    二、请求转发 (forword)

    请求转发,即request.getRequestDispatcher().forward(),是一种服务器的内部行为,客户端只有一次请求,服务器端转发后会将请求对象保存,地址栏中的URL地址不会改变,得到响应后服务器端再将响应发给客户端。传输的信息不会丢失。

    @WebServlet("/resource-1")
    public class Resource1 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("resource 1 下的 get 方法");
    
    //        resp.sendRedirect("/resource-2"); // 重定向
    		// 请求转发
            req.getRequestDispatcher("/resource-2").forward(req, resp);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    回到目录…


    总结:
    提示:这里对文章进行总结:
    以上就是今天的学习内容,本文是JavaWeb的学习,认识了重定向和请求转发,重定向是HTTP的行为,做了两次请求;而转发是Servlet内部行为,对于客户端来说只做了一次请求。之后的学习内容将持续更新!!!

  • 相关阅读:
    如何在 Windows 10/11 上编辑 PDF [4 种简单方法]
    PyInstaller 动指定这些库的路径
    [附源码]Python计算机毕业设计django学生学习评价与分析系统
    HMAC 详解:在 Golang 中实现消息认证码
    函数式编程------JDK8新特性
    无涯教程-JavaScript - OCT2HEX函数
    leetcode35. Search Insert Position
    docker启动tomcat容器实例,浏览器访问失败
    Oracle/PLSQL: Bin_To_Num Function
    python机器人编程——垃圾自动分类,在VREP环境中,UARM与摄像头联动,实现基于视觉识别的自动抓取(下)
  • 原文地址:https://blog.csdn.net/qq15035899256/article/details/126349919