• 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内部行为,对于客户端来说只做了一次请求。之后的学习内容将持续更新!!!

  • 相关阅读:
    java入坑之国际化编程
    Android Logcat 命令行工具
    Java如何连接数据库
    Python 页面解析:Beautiful Soup库的使用
    使用ASP.NET Core封装接口请求参数格式
    C语言实现将一个数组逆序输出,使用指针数组操作
    Linux网络流量安全审计的神器
    深度学习中的正则化技术 - 参数绑定和参数共享篇
    JSON与AJAX
    腾讯联手警方重拳出击,平阳警方斩断特大外挂黑色产业链
  • 原文地址:https://blog.csdn.net/qq15035899256/article/details/126349919