SpringMVC域对象共享数据示例详解

网友投稿 290 2022-07-27


目录SpringMVC域对象共享数据一、域对象1. 域对象的作用2. 域对象生命周期3. 使用原则二、向域对象共享数据1. 向 request 域对象共享数据2. 向 session 域共享数据3. 向 application 域共享数据

SpringMVC域对象共享数据

一、域对象

1. 域对象的作用

就是在一定范围内可以共享数据,通常有 3 种:

request: 一次请求,多个资源共享数据session: 默认一次会话,多个请求,多个资源共享数据servletContext: 一个应用,多个会话,多个请求,多个资源共享同一份数据

2. 域对象生命周期

request: 创建-请求开始,销毁-响应结束session: 创建-第一次调用,销毁- tomcat超时三十分钟(默认)、或者手动调用invalidate()、或者服务器非正常关闭servletContext: 创建-启动时,销毁-关闭时

3. 使用原则

在满足需求的前提下,能选择小范围的就不选择大范围的。

举例,一个查询列表场景,这种一般放在 request 域中,当然了放在更大的2个里面也可以,但是没必要。

因为除了查询还同时会存在增删改的功能,所以我们要每次去查询一次才可以保证数据是最新的,这时候如果放在更大的域比如 session 中,那么在一次请求中只会用到一次,其他时候这个空间就浪费掉了。

二、向域对象共享数据

1. 向 request 域对象共享数据

(1)使用 servletAPI 向 request 域对象共享数据

@Controller

public class ScopeController {

@RequestMapping("/http://testServletAPI")

public String testServletAPI(HttpServletRequest request){

request.setAttribute("testScope", "hello,servletAPI");

return "success";

}

}

在控制器方法里,设置 request 域对象中的数据,key 是testScope,value是"hello,servletAPI",最后这个请求转发到了 success.html 上。

那么在 success.html 中就可以获得域对象中的数据了,直接使用 key:

<!DOCTYPGFlsbGRE html>

success

现在访问http://localhost:8080/springmvc/testServletAPI,

可以看到展示出了获取到的 request 域中共享的数据。

(2)使用 ModelAndView 向 request 域对象共享数据

ModelAndView 有 Model和 View的功能,Model主要用于向请求域共享数据,View主要用于设置视图,实现页面跳转。这种也是 springMVC 建议使用的方式。

注意控制器方法必须要返回 ModelAndView 类型的对象。

@RequestMapping("/testModelAndView")

public ModelAndView testModelAndView(){

/**

* ModelAndView有Model和View的功能

* Model主要用于向请求域共享数据

* View主要用于设置视图,实现页面跳转

*/

ModelAndView mav = new ModelAndView();

//向请求域共享数据

mav.addObject("testScope", "hello,ModelAndView");

//设置视图,实现页面跳转

mav.setViewName("success");

return mav;

}

访问一下http://localhost:8080/springmvc/testModelAndView:

获取成功。

(3)使用 Model 向 request 域对象共享数据

这里的 Model 其实就是上面 ModelAndView 中的 Model 。

@RequestMapping("/testModel")

public String testModel(Model model){

model.addAttribute("testScope", "hello,Model");

return "success";

}

测试一下:

获取成功。

(4)使用 map 向 request 域对象共享数据

还可以使用 map 集合来实现,这时候向 map 集合中存放的数据,就是要共享的数据:

@RequestMapping("/testMap")

public String testMap(Map map){

map.put("testScope", "hello,Map");

return "success";

}

测试一下:

获取成功。

(5)使用 ModelMap 向 request 域对象共享数据

@RequestMapping("/testModelMap")

public String testModelMap(ModelMap modelMap){

modelMap.addAttribute("testScope", "hello,ModelMap");

return "success";

}

测试一下:

获取成功。

Model、ModelMap、Map的关系

Model、ModelMap、Map类型的参数其实本质上都是 BindingAwareModelMap 类型的。

分别查看源码可知如下关系:

public interface Model{}

public class ModelMap extends LinkedHashMap {}

public class ExtendedModelMap extends ModelMap implements Model {}

public class BindingAwareModelMap extends ExtendedModelMap {}

2. 向 session 域共享数据

直接使用 servlet 原生的 HttpSession 即可:

@RequestMapping("/testSession")

public String testSession(HttpSession session){

session.setAttribute("testSessionScope", "hello,session");

return "success";

}

success 页面也需要修改了,通过 session.testSessionScope获取数据展示:

... ...

... ...

重新部署访问http://localhost:8080/springmvc/testSession:

3. 向 application 域共享数据

其实这里的 application 指的就是 ServletContext 对象,用 session.getServletContext() 来获取即可:

@RequestMapping("/testApplication")

public String testApplication(HttpSession session){

ServletContext application = session.getServletContext();

application.setAttribute("testApplicationScope", "hello,application");

return "success";

}

success.html 修改:

... ...

重新部署访问http://localhost:8080/springmvc/testApplication:

获取成功。

感谢《尚硅谷》的学习资源。

以上就是SpringMVC域对象共享数据示例详解的详细内容,更多关于SpringMVC域对象共享数据的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:利用5分钟快速搭建一个springboot项目的全过程(创建springboot项目步骤)
下一篇:SpringMVC视图转发重定向区别及控制器详解(springmvc怎么设置重定向和转发)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~