首页 > 编程语言 > 详细

JavaWeb-03-Servlet-09-多个Servlet之间的调用

时间:2021-08-17 10:14:16      阅读:17      评论:0      收藏:0      [点我收藏+]

JavaWeb-03-Servlet-09-多个Servlet之间的调用

1.问题

某些来自于浏览器中的请求,往往需要服务端中多个Servlet接口实现类协同处理。

但是浏览器一次只能访问一个Servlet,这就导致用户需要手动通过浏览器发起多次请求才能获得服务。

这样会增加用户获得服务的难度。

技术分享图片

2.如何解决

提高用户体验。

无论本次请求涉及到多少个Servlet,让用户只需要【手动】通知浏览器发起一次请求即可,

剩下的调用交给后台处理。

3.解决方案

解决多个Servlet之间的调用。

  1. 重定向解决方案
  2. 请求转发解决方案

4.重定向解决方案

4.1工作原理

技术分享图片

用户第一次通过【手动方式】通知浏览器访问OneServlet。

OneServlet处理请求完毕后,将TwoServlet的地址写入响应头的【location】属性中,导致Tomcat将302状态码写入到状态行。

在浏览器接收到响应包后,读取到302状态码。此时浏览器会自动根据响应头中的【location】属性里的地址发起第二次请求,访问TwoServlet去完成请求中的剩余任务。

TwoServlet处理请求完毕后,将ThreeServlet的地址写入响应头的【location】属性中,导致Tomcat将302状态码写入到状态行。

在浏览器接收到响应包后,读取到302状态码。此时浏览器会自动根据响应头中的【location】属性里的地址发起第三次请求,访问ThreeServlet去完成请求中的剩余任务。

ThreeServlet处理完请求后,将处理结果写入响应体中,发送给浏览器。导致Tomcat将200状态码写入到状态行。

4.2实现命令

response.sendRedirect("请求地址");

将地址写入响应头中的【location】属性。

4.3演示

新建一个网站MyWeb,创建三个Servlet接口实现类。【OneServlet】、【TwoServlet】、【ThreeServlet】。

在/web目录下新建一个html页面,创建一个表单,指向OneServlet。

4.3.1第一个: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");//地址格式:[/网站名/资源文件名]
    }
}

4.3.2第二个:TwoServlet

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");//地址格式:[/网站名/资源文件名]
    }
}

4.3.2第三个:ThreeServlet

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");

    }
}

4.3.3html页面

在/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>

4.3.4开始演示

技术分享图片

JavaWeb-03-Servlet-09-多个Servlet之间的调用

原文:https://www.cnblogs.com/TSCCG/p/15150409.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!