【springMVC】三个域对象

1.三个域对象

     1.1.请求域:request

        接口名:HttpServletRequest,equest对象代表了一次请求,一次请求一个request。

        应用场景:A转发到B,两者可通过request共享资源

     1.2.会话域:session

        接口名:HttpSession,session对象代表了一次会话。从打开浏览器开始访问,到最终浏览器关闭,这是一次完整的会话。每个会话session对象都对应一个JSESSIONID,而JSESSIONID生成后以cookie的方式存储在浏览器客户端。浏览器关闭,JSESSIONID失效,会话结束。

        应用场景:保存用户的登录状态

     1.3.应用域:application

        接口名:ServletContext,application对象代表了整个web应用,服务器启动时创建,服务器关闭时销毁。对于一个web应用来说,application对象只有一个。

        应用场景:记录网站的在线人数

2.request域对象

     在request域中共享数据方式:使用原生Servlet API方式;使用Model接口;使用Map接口;使用ModelMap类;使用ModelAndView类

     2.1.原生Servlet API方式

//存数据
@RequestMapping("/testServletAPI")
    public String testServletAPI(HttpServletRequest request){
        // 向request域中存储数据
        request.setAttribute("testRequest", "原生Servlet API实现request域数据共享");
        return "view";
    }
//取数据
<div th:text="${testRequest}"></div>

     2.2. Model接口  

@RequestMapping("/testModel")
public String testModel(Model model){
    // 向request域中存储数据
    model.addAttribute("testRequest", "Model接口实现request域数据共享");
    return "view";
}

     2.3.Map接口

@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
    // 向request域中存储数据
    map.put("testRequest", "Map接口实现request域数据共享");
    return "view";
}

     2.4.ModelMap类

@RequestMapping("/testModelMap")
public String testModelMap(ModelMap modelMap){
    // 向request域中存储数据
    modelMap.addAttribute("testRequest", "ModelMap实现request域数据共享");
    return "view";
}

     2.5.ModelAndView类

        实例封装了Model和View,这个类既封装业务处理之后的数据,也体现了跳转到哪个视图。

@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
    // 创建“模型与视图对象”
    ModelAndView modelAndView = new ModelAndView();
    // 绑定数据
    modelAndView.addObject("testRequest", "ModelAndView实现request域数据共享");
    // 绑定视图
    modelAndView.setViewName("view");
    // 返回
    return modelAndView;
}

3.session域对象

     常见的方式:原生Servlet API;SessionAttributes注解

     3.1.原生Servlet API

//存数据 
@RequestMapping("/testSessionScope1")
    public String testServletAPI(HttpSession session) {
        // 向会话域中存储数据
        session.setAttribute("testSession", "原生Servlet API实现session域共享数据");
        return "view";
    }
//取数据
<div th:text="${session.testSession}"></div>

     3.2. 使用SessionAttributes注解

        如果没有 SessionAttributes注解,默认存储到request域中。

@Controller
@SessionAttributes(value = {"x", "y"})
public class SessionScopeTestController {

    @RequestMapping("/testSession")
    public String testSessionAttributes(ModelMap modelMap){
        // 向session域中存储数据
        modelMap.addAttribute("x", "张三");
        modelMap.addAttribute("y", "李四");

        return "view";
    }
}

4.application域对象

@RequestMapping("/testApplicationScope")
    public String testApplicationScope(HttpServletRequest request){
        
        // 获取ServletContext对象
        ServletContext application = request.getServletContext();

        // 向应用域中存储数据
        application.setAttribute("application", "全局数据");

        return "view";
    }

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值