Springmvc之向JSP页面提供数据(request,session)

Springmvc之向JSP页面提供数据(request,session)

准备

  • Springmvc默认就是转发,因此可以在request域中共享数据
  • 表单提交,注册
<form action="<%=request.getContextPath()%>/user/login.do" method="post">
    username:<input type="text" name="username"> <br>
    password:<input type="text" name="password"> <br>
    age:<input type="text" name="age">
    <input type="submit" value="提交">
</form>
  • User类
public class User {
    private String username;
    private String password;
    int age;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + "]";
    }
​
}

使用HttpServletRequest转发

  • 直接使用HttpServletRequest中的setAttribute(key,value)即可添加属性值request域中,那么在JSP页面即可使用EL表达式获取
    /**
     * @param user 接收请求参数
     * @param request   添加属性值request域中
     */
    @RequestMapping(value = "/login.do")
    public String login(User user,HttpServletRequest request,HttpServletResponse response) {
        System.out.println(user);
        request.setAttribute("user", user);
        return "error";
    }

【不常用】使用ModelAndView转发

  • ModelAndView中本身就是用来存储数据和视图的,因此我们可以使用ModelAndView来传值
  • ModelAndView会利用HttpServletRequest中的setAttribute(key,value)将数据存储在requst域中
  • Model表示的就是转发的数据,可以通过ModelAndView(String viewName,Map<String,?> map)构造方法封装Model,其中Model的类型就是Map<String,?>
    @RequestMapping(value = "/login.do")
    public ModelAndView login(User user) {
        System.out.println(user);
        //创建一个Map,存储数据
        Map<String, User> map=new HashMap<String, User>();
        //将获取的user对象存储进去
        map.put("user", user);
        //返回一个ModelAndView对象,第一个参数是视图,第二个是Map存储数据
        return new ModelAndView("error", map);
    }

【推荐使用】使用ModelMap转发

  • 利用HttpServletRequest中的setAtttibute()添加数据到request域中
  • 直接在处理请求的方法中,添加ModelMap类型的参数,当需要转发数据时,调用它的addAttribute方法封装数据,如果需要封装多条,多次调用即可
    @RequestMapping(value = "/login.do")
    public String login(User user,ModelMap map) {
        System.out.println(user);
        //将数据存储在ModelMap中
        map.addAttribute("user", user);
        return "error";
    }

拓展

  • 从源代码可以看出,ModelMap实际上是实现了Map接口,因此我们也可以直接使用Map传值
    • 直接在方法的参数中声明即可,spring会自动注入
    @RequestMapping(value = "/login.do")
    public String login(User user,Map<String, Object> map) {
        System.out.println(user);
        //将数据存储在ModelMap中
        map.put("user", user);
        return "error";
    }

Session

  • 浏览器关闭或者在session的指定时间内没有操作,那么session会自动关闭
  • 通常会把访问的用户的唯一标识(用户的ID或用户名,邮箱等)和使用频率使用较高的数据(用户名,昵称,头像)存储在Session中。

使用HttpSession

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

2018-04-27 读配置文件到静态变量中,加载properties到static变量field

项目的配置文件要写到jar档外面,提供给运维人员更改,基于这个需求,就会有很多的常量需要从外部文件读取进来 JAVA最常见的就是properties文件,提供k...

3619
来自专栏JavaEdge

使用Spring Data JPA访问关系型数据库添加数据库和jpa依赖定义实体对象创建对象访问方法总结

我们将定义一个实体对象UserApply并将其存储到关系型数据库中,并使用JPA注解:

962
来自专栏Java技术栈

Java 必看的 Spring 知识汇总!

2233
来自专栏微信公众号:Java团长

Spring Boot属性配置和使用

Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置。

1241
来自专栏Spring相关

第3章—高级装配—条件化的Bean

通过活动的profile,我们可以获得不同的Bean。Spring 4提供了一个更通用的基于条件的Bean的创建方式,即使用@Conditional注解。

912
来自专栏程序猿DD

Spring Boot 2.0 新特性(一):配置绑定 2.0 全解析

在Spring Boot 2.0中推出了Relaxed Binding 2.0,对原有的属性绑定功能做了非常多的改进以帮助我们更容易的在Spring应用中加载和...

3884
来自专栏Java 技术分享

SpringMVC(一)

1222
来自专栏Java成神之路

SpringMVC学习笔记

(1)通过 contextConfigLocation 来配置 SpringMVC 的配置文件

1034
来自专栏Java3y

SpringMVC【开发Controller】详解

前言 本文主要是讲解在Controller中的开发,主要的知识点有如下: 编码过滤器 使用注解开发 注解@RequestMapping详解 业务方法接收参数 字...

3508
来自专栏Java Web

Spring(3)——装配 Spring Bean 详解

装配 Bean 的概述 前面已经介绍了 Spring IoC 的理念和设计,这一篇文章将介绍的是如何将自己开发的 Bean 装配到 Spring IoC 容器中...

4874

扫码关注云+社区

领取腾讯云代金券