zoukankan      html  css  js  c++  java
  • 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

      

    一点一点积累,一点一点蜕变!
  • 相关阅读:
    系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
    微阵列杂交(Microarray Hybridization)
    autocad2018安装笔记
    java基础 大数类
    leetCode 23
    java语言基础 String类
    定时任务cronie
    Linux-vim使用操作大全
    计网期末复习题目
    操作系统期末复习题
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/14274656.html
Copyright © 2011-2022 走看看