【Servlet】服务器内部转发以及客户端重定向

文章目录

一、服务器内部转发:request.getRequestDispatcher("...").forward(request, response);

一次请求响应的过程,对于客户端而言,内部经过了多少次转发,客户端是不知道的。地址栏中的URL是不会变化的。

内部经过3、4次跳转都是一次请求响应。如图所示:


二、客户端重定向:response.sendRedirect("×××");

两次请求响应的过程。客户端肯定知道请求URL有变化。如图所示:


三、服务器内部转发代码示例

服务器内部转发:证明可通过代码断点调试

Demo06Servlet.java

java 复制代码
// 演示服务器端内部转发
public class Demo06Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo06....");
        // 服务器端内部转发
        request.getRequestDispatcher("demo07").forward(request, response);
    }
}

Demo07Servlet.java

java 复制代码
public class Demo07Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo07....");
    }
}

web.xml

xml 复制代码
<servlet>
    <servlet-name>Demo06Servlet</servlet-name>
    <servlet-class>com.atguigu.servlets.Demo06Servlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Demo06Servlet</servlet-name>
    <url-pattern>/demo06</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Demo07Servlet</servlet-name>
    <servlet-class>com.atguigu.servlets.Demo07Servlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Demo07Servlet</servlet-name>
    <url-pattern>/demo07</url-pattern>
</servlet-mapping>

四、客户端重定向代码示例

Demo06Servlet.java

java 复制代码
// 演示服务器端内部转发以及客户端重定向
public class Demo06Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo06....");
        // 客户端重定向
        response.sendRedirect("demo07");
    }
}

Demo07Servlet.java

java 复制代码
public class Demo07Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo07....");
    }
}

web.xml

xml 复制代码
<servlet-mapping>
    <servlet-name>Demo06Servlet</servlet-name>
    <url-pattern>/demo06</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Demo07Servlet</servlet-name>
    <servlet-class>com.atguigu.servlets.Demo07Servlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Demo07Servlet</servlet-name>
    <url-pattern>/demo07</url-pattern>
</servlet-mapping>

访问demo06,一敲回车,可以发现它发送了两次请求

点击demo06的请求,可以发现状态码为302(重定向),Location也变成了demo07

demo07的状态码则是200

相关推荐
微三云 - 廖会灵 (私域系统开发)4 小时前
抖店 OPC 自动化运营系统架构与商业代理分控体系完整解析
运维·系统架构·自动化
G31135422734 小时前
大模型不可用时,业务还能不能继续:企业需要设计降级方案
大数据·服务器·数据库·人工智能·深度学习
办公室马主任5 小时前
华南机械加工企业选MES服务商怎么选?
大数据·运维·人工智能·制造
小陈同学!!6 小时前
防火墙双机热备实验
运维·服务器
tianyuanwo6 小时前
DevOps主机管理员视角:企业级Linux主机权限管理策略与实践
linux·服务器·devops
三言老师6 小时前
CentOS8 Firewalld 高级规则中级实操教程
linux·运维·服务器·网络·centos
Promise微笑6 小时前
露点仪:康高特朝露(冷镜)vs 进口密析尔 、肖氏,怎么选?
运维
云贝贝贝8 小时前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
tedcloud1238 小时前
Impeccable 部署指南:开源前端设计工具 Linux 环境搭建实践
linux·运维·服务器·前端·人工智能·开源
数智化管理手记8 小时前
传统架构无法适配元数据迭代?业务中台升级改造方案是什么?
运维·数据库·架构