【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

相关推荐
数智化管理手记1 小时前
精益生产中的TPM管理是什么?一文破解设备零故障的密码
服务器·网络·数据库·低代码·制造·源代码管理·精益工程
w6100104662 小时前
CKAD-2026-Ingress
运维·k8s·ckad
@insist1233 小时前
网络工程师-生成树协议(STP/RSTP/MSTP)核心原理与应用
服务器·开发语言·网络工程师·软考·软件水平考试
zzzsde5 小时前
【Linux】库的制作和使用(3)ELF&&动态链接
linux·运维·服务器
CQU_JIAKE5 小时前
4.3【A]
linux·运维·服务器
AI周红伟6 小时前
OpenClaw是什么?OpenClaw能做什么?OpenClaw详细介绍及保姆级部署教程-周红伟
大数据·运维·服务器·人工智能·微信·openclaw
Elastic 中国社区官方博客6 小时前
当 TSDS 遇到 ILM:设计不会拒绝延迟数据的时间序列数据流
大数据·运维·数据库·elasticsearch·搜索引擎·logstash
qing222222226 小时前
Linux中修改mysql数据表
linux·运维·mysql
TechWayfarer6 小时前
科普:IP归属地中的IDC/机房/家庭宽带有什么区别?
服务器·网络·tcp/ip
杨云龙UP6 小时前
Oracle 中 NOMOUNT、MOUNT、OPEN 怎么理解? 在不同场景下如何操作?_20260402
linux·运维·数据库·oracle