request实现转发跳转

现有的问题

  在之前的案例里,以展示所有用户为例,调用业务逻辑和显示结果页面都在同一个servlet里

  

  这样不符合单一职责原则、各司其职的思想,也不利于后续的维护

解决方法

  于是我们把业务逻辑和显示结果相分离

  

  在这个样例里,业务逻辑其实就这两行

  

  现在我们把它们放到ShowAllAdminController类里面,由它来实现业务逻辑,注意这个类也要继承httpservlet,并重写两个方法,在get方法里调用我们的业务逻辑

  

  然后我们把显示结果部分代码转至ShowAllAdminController类中,但值得注意的是,JSP类中已然没有admins,这该怎么办呢

  

  JSP做的事情只有显示结果,但数据它是没有的,数据在哪呢,在ShowAllAdminController里

  这个时候我们就会产生两个问题:

  业务逻辑和显示分离后,如何跳转到显示结果的Servlet里?

  业务逻辑得到的数据如何传递给显示结果的servlet?

  这时就引出我们的转发知识了!

转发

  转发的作用在服务器端,将请发送给服务器上的其他资源,以共同完成一次请求的处理。

  页面跳转,可以在调用业务逻辑的servlet中:

request.getRequestDispatcher("/目标URL-pattern").forward(request,response);

  这样我们就解决了第一个问题,客户端发送请求给的是A servlet,A通过请求的转发发送给了B,来共同完成一次请求,B就可以显示结果了。

  这里我们注意forward表示的是一次请求,是在服务器内部跳转,可以共享一次request作用域中的数据

  requset作用域:拥有存储数据的空间,作用范围是一次请求有效(一次请求可以有多次转发)

  •存数据,以键值对的形式存储在request作用域中,key为string类型,value为object类型

request.setAttribute(key,value);

  •取数据,通过string类型的key方位object类型的value

request.getAttribute(key,value);

  现在我们回到第二个问题,在controller里面,我们就可以把数据存入request里面,然后通过转发跳转到JSP里面

  

  然后我们就可以在JSP的servlet用request做一个数据的接收

  

  大功告成,现在访问showAllController,成功显示数据

  

项目地址

  https://github.com/Layton-sy/My_Servlet

 

 

 

 

 

 

 

 

 

 

 

 

 

  

posted @ 2021-01-13 22:01  艾尔夏尔-Layton  阅读(436)  评论(0编辑  收藏  举报