【SpringMVC05】SpringMVC传值

所谓的传值就是当C层得到数据后,需要跳转到V并且向V传输数据,进而V层可以做进一步的渲染;

在V中获取数据还是主要集中在Request作用域数据Session作用域数据,由转发和重定向的特点可以知道:

  • 转发:作用域数据存储在Request作用域中;

  • 重定向:作用域存储在Session作用域中;

此外由于用到了Request作用域和Session作用域,pom.xml文件中需要添加Servlet的相关依赖:

<dependency>
    <!-- jstl 支持 -->
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <!-- servlet编译环境 -->
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <!-- jsp编译环境 -->
    <groupId>javax.servlet</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
</dependency>

1 Request和Session

传统的Servlet中的Request作用域和Session作用域可以以方法参数的形式获得:

@RequestMapping("test1")
public String test1(HttpServletRequest request, HttpSession session){
    request.setAttribute("varRequest","varRequest-Value");
    session.setAttribute("varSession","varSession-Value");
    return "data";
}
  • 方法形参列表中的Request和Session并没有先后顺序要求,并且是可选的;

对应的在JSP中使用EL表达是获取对应作用域的数据:

${requestScope.get("varRequest")}
${sessionScope.get("varSession")}

页面展示:

 

2 Model

Model是SpingMVC提供的类,同样的也可以通过方法形参列表去获取:

@RequestMapping("/test2")
public String test2(Model model){
    model.addAttribute("modelVarKey","modelVarValue");
    return "data";
}
  • model.addAttribute:Model对象存储的也是键值对的形式,通过这个方法添加;

Model对象默认会将其中的数据复制一份存储在Request作用域中,前端JSP获取需要使用requestScope.XXXX,当然也可以添加设置使之存储在Session作用域中,方法是在SpirngMVC类名前添加注解@SessionAttributes

@Controller
@RequestMapping("/data")
@SessionAttributes(names = {"session1","session2"})
public class DataController {
  • names=:还有一个别名为value;

添加几个Session作用域的数据:

@RequestMapping("/test2")
public String test2(Model model){
    model.addAttribute("modelVarKey","modelVarValue");
    model.addAttribute("session1","session1-Value");
    model.addAttribute("session2","session2-Value");
    return "data";
}

前端JSP获取:

${requestScope.modelVarKey}
${sessionScope.session1}
${sessionScope.session2}

此外,还可以通过方法清除由@SessionAttributes注解产生的Session数据:

 

@RequestMapping("/clearSession")
public String clearSession(SessionStatus sessionStatus){
    sessionStatus.setComplete();
    return "data";
}

页面展示:

 

发送清除Session的请求:

可以看到,有注解产生的Session已经被清楚,但手动setAttribute的Session并不会被清除;

3 ModelAndView

ModelAndView是SpingMVC提供的类,可以实现跳转的同时传递数据,使用示例:

@RequestMapping("/test3")
public ModelAndView test3(){
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("mv","modelAndView");
    modelAndView.setViewName("data");
    return modelAndView;
}
  • addObject:设置需要传递的数据;

  • setViewName:设置跳转的位置;

前端取值和Model对象一致,没有设置@SessionAttributes的话默认使用requestScope获取:

${requestScope.mv}

页面展示:

另:完整的JSP页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${requestScope.get("varRequest")}
${sessionScope.get("varSession")}
${requestScope.modelVarKey}
${sessionScope.session1}
${sessionScope.session2}
${requestScope.mv}
</body>
</html>

版权声明:
作者:jackqiang
链接:http://www.jackqiang.com/framework/springmvc/2200/mvc_data/
来源:JackQiang's
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录