SpringMVC @SessionAttributes如何将会话对象发送到JSP

时间:2016-06-23 15:55:21

标签: html spring jsp spring-mvc web-applications

我正在学习SpringMVC框架,我从here得到了以下示例。 Java控制器:

SessionController.java

package javabeat.net.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;

@Controller
@RequestMapping("/sessiontest")
@SessionAttributes("sessionValue")
public class SessionController {
    @RequestMapping(method = RequestMethod.GET)
    public String getForm(@RequestParam("param") String paramVal, ModelMap map){
        System.out.println("Param Value : " + paramVal);
        map.addAttribute("sessionValue", "Test Object");
        return "hello";
    }

}

JSP页面:

hello.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<%
    String value = (String)session.getAttribute("sessionValue");
    out.print(value);
%>
</body>
</html>

我想了解执行的流程:

据我所知,它假定在执行流程中首先会遇到URL /sessiontest?param=paramVal。然后将paramVal筛选到控制台。然后,使用键值对map丰富集合"sessionValue"/"Test Object"。然后返回"hello"。因此,当hello.jsp被点击时,它会检索刚刚添加的值,并且html正文屏幕Test Object

如果我的上述解释是正确的,我想知道:

1)谁将ModelMap map对象传递给方法getForm

2)将hello归还无处的目的是什么?

3)JSP中的session对象如何与添加新键值对的ModelMap map绑定?

1 个答案:

答案 0 :(得分:1)

我想我不太擅长解释事情,因为我的言语很笨拙。 但事情就是这样:

  

1)谁将ModelMap地图对象传递给方法getForm?

Spring容器生成此模型对象,并且(在场景后面)调用它作为方法的参数,它就像JSP隐式对象( request {{ 1}} ,. etc)其中JSP容器使它们在每个页面中可用,并且可以直接调用这些对象而不显式声明。

response 用于包装一些属性(键和值),以便您可以将这些值传递给从方法返回的视图。稍后,您可以通过相应的键在视图中访问这些值。

  

2)。将你好回到哪里的目的是什么?

hello 是从您可以访问地图中先前包装属性的方法转发的视图名称(ModelMap

  

3)JSP中的会话对象如何与ModelMap映射绑定在哪里   是否正在添加新的键值对?

在控制器上使用Spring的 hello.jsp 来指定哪些模型属性(将这些属性视为包含在地图中的键和值)应存储在会话中。

简单说明:由于此控制器使用 @SessionAttributes 进行注释,因此每当地图包装使用“ sessionValue ”键映射的值时,该值将在HttpSession中提供。

然后,您将在视图中通过隐式 @SessionAttributes("sessionValue") 对象访问此会话属性。

session