某些来自于浏览器中的请求,往往需要服务端中多个Servlet接口实现类协同处理。
但是浏览器一次只能访问一个Servlet,这就导致用户需要手动通过浏览器发起多次请求才能获得服务。
这样会增加用户获得服务的难度。
提高用户体验。
无论本次请求涉及到多少个Servlet,让用户只需要【手动】通知浏览器发起一次请求即可,
剩下的调用交给后台处理。
解决多个Servlet之间的调用。
用户第一次通过【手动方式】通知浏览器访问OneServlet。
OneServlet处理请求完毕后,将TwoServlet的地址写入响应头的【location】属性中,导致Tomcat将302状态码写入到状态行。
在浏览器接收到响应包后,读取到302状态码。此时浏览器会自动根据响应头中的【location】属性里的地址发起第二次请求,访问TwoServlet去完成请求中的剩余任务。
TwoServlet处理请求完毕后,将ThreeServlet的地址写入响应头的【location】属性中,导致Tomcat将302状态码写入到状态行。
在浏览器接收到响应包后,读取到302状态码。此时浏览器会自动根据响应头中的【location】属性里的地址发起第三次请求,访问ThreeServlet去完成请求中的剩余任务。
ThreeServlet处理完请求后,将处理结果写入响应体中,发送给浏览器。导致Tomcat将200状态码写入到状态行。
response.sendRedirect("请求地址");
将地址写入响应头中的【location】属性。
新建一个网站MyWeb,创建三个Servlet接口实现类。【OneServlet】、【TwoServlet】、【ThreeServlet】。
在/web目录下新建一个html页面,创建一个表单,指向OneServlet。
重写doGet方法,将TwoServlet的地址写入响应头的location属性。
package com.tsccg.controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author: TSCCG
* @Date: 2021/08/16 22:03
*/
public class OneServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("OneServlet负责---->去叙利亚");
//重定向解决方案
response.sendRedirect("/MyWeb/two");//地址格式:[/网站名/资源文件名]
}
}
package com.tsccg.controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author: TSCCG
* @Date: 2021/08/16 22:06
*/
public class TwoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("TwoServlet负责---->买AK");
//重定向解决方案
response.sendRedirect("/MyWeb/three");//地址格式:[/网站名/资源文件名]
}
}
package com.tsccg.controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @Author: TSCCG
* @Date: 2021/08/16 22:08
*/
public class ThreeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("ThreeServlet负责---->在叙利亚进行真人CS---->返回结果");
response.sendRedirect("/MyWeb/body.jpg");
}
}
在/web目录下,新建一个index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>叙网</title>
<style type="text/css">
* {
font-size: 25px;
}
.title {
color: red;
font-size: 30px;
}
</style>
</head>
<body>
<center>
<div class="title">叙利亚欢迎您!</div>
<span><img src="http://assets.processon.com/chart_image/611a7b090e3e741288af99f9.png"/></span>
<form action="/MyWeb/one" method="get">
姓名:<input type="text" name="userName">
<br>
密码:<input type="password" name="passWord">
<br>
<input type="submit" value="点击报名">
<input type="reset" value="重置">
</form>
</center>
</body>
</html>
JavaWeb-03-Servlet-09-多个Servlet之间的调用
原文:https://www.cnblogs.com/TSCCG/p/15150409.html