Servlet之间的联系通讯和共享传输数据

发布于:2022-10-29 ⋅ 阅读:(240) ⋅ 点赞:(0)

一、Servlet的联系通讯

        一般来说,当客户端发来请求时,Servlet就会承担处理请求和返回响应的责任,但只有一个Servlet的话就会显得处理代码及其臃肿,所以会使用多个Servlet进行不同功能的请求响应处理,自然而然Servlet之间的联系通讯就会重要起来。

        Servlet的联系通讯方式有两种:

                1、请求转发(单纯的Servlet之间的联系)

                2、请求重定向(有客户端参与的Servlet之间的联系)

        (1)、请求转发:要我用形象通俗的语句描述请求转发的话,便是:A找B借钱,B答应了A,但B身上暂时没钱,所以B在A不知情的情况下找到了C要了一些钱,再回过头把钱借个A,A从头到尾不知道B和C之间也有过联系,B偷偷找C借钱的行为可以理解为请求转发。

                创建两个Servlet(ThirdServlet和FourthServlet)并让ThirdServlet把从前端输入的参数放进req和resp里将其转发到FourthServlet去,让C进行响应处理:

 

                 运行项目,输入参数,点击提交,查看结果

 

                 由此可知,前端传来的参数成功地从ThirdServlet传到了FourthServlet,并由FourthServlet做出了响应处理,但从浏览器上的结果的URL里的来看可知,客户端实际是不知道响应是由FourthServlet处理的,显示的依旧是ThirdServlet的别名。

        (2)、请求重定向:依旧用个人理解的通俗举例来比喻重定向,A找B借钱,B没钱借给A,但B告诉A“我虽然没钱你却可以找C借钱,他有钱”,于是A去找C借钱并成功借到了钱。B告诉A找C借钱且A找C成功借到了钱这一系列事件可理解为请求重定向。

                创建两个Servlet(ThirdServlet和FourthServlet),先让ThirdServlet把请求数据传给FourthServlet(否则FourthServlet作为一个新的Servlet其中的req和resp的内容是空白的),然后开启请求重定操作向让FourthServlet处理客户端的响应,且客户端也知道是FourthServlet处理的:

                 ThirdServlet通过session(稍后Servlet的数据共享会讲解)将请求数据共享给FourthServlet,不然FourthServlet对于客户端来说就像是新开的浏览器页面,不会收到任何客户端输入的参数。

 

                 运行项目,输入参数,点击提交,查看结果

 

                 由此可知,前端传来的参数成功地从ThirdServlet传到了FourthServlet,并由FourthServlet做出了响应处理,并且从结果的URL可知,客户端也是知道响应处理也是由FourthServlet处理的,URL显示的是FourthServlet的别名。

二、Servlet之间共享传递数据的方法

        Servlet之间共享传递数据的方法主要有三种:req直接通过作用域的方法,将数据从一个Servlet传递到另一个Servlet;传递方Servlet创建一个HttpSession,让HttpSession通过作用域的方法,将数据从一个Servlet传递到另一个Servlet;传递方Servlet创建一个ServletContext,让ServletContext通过作用域的方法,将数据从一个Servlet传递到另一个Servlet。

        

        照旧举一个通俗易懂了现实例子来解释:

                1、有一个处理货物的工厂,员工A告知员工B:“我知道你需要物品X,你去某个地方的某个桌子上把这个物品X拿走吧,那是我放在那儿的”,于是员工B得到了物品X;

                2、有一个处理货物的工厂,里面有个员工C,专门跑腿帮忙传递员工之间需求给予的物品,在工作日里,员工C就帮员工A把物品X传递给了员工B,但后来员工C下班了,要再想传递就只能等下次上班了;

                3、有一个处理货物的工厂,里面有一间暂存库房 ,专门用来存放员工之间需求给予的物品,员工A在这间库房都某个做好标记的箱子里放置了物品X,并告知员工B有空过来拿,员工B可选择上班时间来拿,也可选择下班后来拿;

        上述例子里:

                1对应了req直接使用作用域方法,而那个桌子就是作用域

                2对应了HttpSession使用作用域方法,专门负责传递物品的员工C就是HttpSession使用作用域,但一旦下班(一旦关闭浏览器,关闭本次会话),员工C就不干了(HttpSession)就不起效果了

                3对应了ServletContext使用作用域方法,暂存库房行驶功能便是ServletContext使用作用域,只要工厂不关闭(web服务不关闭),员工可随时使用该库房暂存物品让另一位员工拿取(一个Servlet可将数据存于ServletContext内让另一个Servlet获取)

 

本文含有隐藏内容,请 开通VIP 后查看