【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

相关推荐
宵时待雨12 分钟前
MySQL数据库1:数据库基础
服务器·数据库·mysql
云栖梦泽15 分钟前
Linux内存管理
linux·运维·服务器
吴声子夜歌20 分钟前
Nginx应用与运维——Nginx Web服务应用实战(静态文件服务器的搭建)
运维·前端·nginx
海宇服务34 分钟前
零信任架构实战:基于海宇身份证OCR构建自动化自助终端核验网关
运维·人工智能·架构·自动化
开开心心就好1 小时前
图片白底怎么去掉?抠图工具抠完背景透明
java·服务器·开发语言·pdf·ocr·散列表·启发式算法
ken22321 小时前
ubuntu 24.04, audacity 4 AppImage 加载 libavdevice.so.62 /.61 /.63 失败:依赖缺失?
linux·运维·ubuntu
未完成的歌~1 小时前
Windows 系统镜像备份还原 操作手册
运维
阳光九叶草LXGZXJ1 小时前
达梦数据库-学习-69-DM9主备集群部署
linux·运维·服务器·数据库·sql·学习
Sun 32851 小时前
Linux 常用命令梳理
linux·运维·服务器·开发·常用命令
一条破秋裤1 小时前
TCP 并发服务器:连接分析、多线程与多进程
服务器·网络·tcp/ip