我正在学习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
绑定?
答案 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