美文网首页Java技术专题程序员
Springmvc之向JSP页面提供数据(request,ses

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

作者: 爱撒谎的男孩 | 来源:发表于2018-10-07 22:25 被阅读52次

    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

        @RequestMapping(value = "/login.do")
        public String login(User user,HttpSession session) {
            //将id存储在session中
            session.setAttribute("uid", "9527");
            return "error";
        }
    

    相关文章

      网友评论

        本文标题:Springmvc之向JSP页面提供数据(request,ses

        本文链接:https://www.haomeiwen.com/subject/devraftx.html