• springMVC


    1.Model

    Model是spring中的一个类,内部结构是一个map,可以批量存储内容。

    index.jsp页面

    <div>
            <form action="/annotation/Request" method = post>
                <!--action是提交路径,method是提交方式,form里面的元素的name属性要和controller中接收的对象类里的属性名一致-->
                账号信息:<br/>
                用户名:<input type="text" name = 'name'><br/>
                密码:<input type="text" name = 'password'><br/>
                用户信息:<br/>
                用户姓名:<input type="text" name = 'user.name'><br/>
                用户年龄:<input type="text" name = 'user.age'><br/>
                用户生日(yyyy-mm-dd):<input type="text" name = 'user.birthday'><br/>
                <input type ="submit" value = "提交到Request">
            </form>
        </div>

    java的controller页面

        //Request
        @RequestMapping(path = "/Request")
        public String requestTest(Model model, Account account){  //Model 是spring中的一个类,里面有一个map可以存值和传递
            model.addAttribute("account1", account);//把前台传过来的的值赋值给Account对象(自己建的,属性和前台表单属性对应),存入model中,键值(key)为account1
            return "show";
        }

    跳转后的show.jsp页面

    <%--
      Created by IntelliJ IDEA.
      User: Administrator
      Date: 10/22/2019
      Time: 1:19 PM
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
    <html>
    <head>
        <title>Show</title>
    </head>
    <body>
        <div>
            name = ${account1.name}
        </div>
        <div>
            name = ${account1.password}
        </div>
        <div>
            name = ${account1.user.name}
        </div>
        <div>
            name = ${account1.user.age}
        </div>
        <div>
            name = ${account1.user.birthday}
        </div>
    </body>
    </html>

    输入:

    输出:

     2. SessionAttribute

    java

        //set
        @RequestMapping(path = "/SetRequest")
        public String setRequestTest(Model model, Account account){  //Model 是spring中的一个类,里面有一个map可以存值和传递
            model.addAttribute("account", account);//把前台传过来的的值赋值给Account对象,存入model中,键值(key)为account1
            return "show";
        }
    
        //get
        @RequestMapping(path = "/GetRequest")
        public String getRequestTest(ModelMap modelMap){  //modelMap 是spring中的一个类,继承了linkedHashMap
            System.out.println("" + modelMap.get("account"));
            return "show";
        }

    index.jsp

        <div>
            <form action="/annotation/SetRequest" method = post>
                <!--action是提交路径,method是提交方式,form里面的元素的name属性要和controller中接收的对象类里的属性名一致-->
                账号信息:<br/>
                用户名:<input type="text" name = 'name'><br/>
                密码:<input type="text" name = 'password'><br/>
                用户信息:<br/>
                用户姓名:<input type="text" name = 'user.name'><br/>
                用户年龄:<input type="text" name = 'user.age'><br/>
                用户生日(yyyy-mm-dd):<input type="text" name = 'user.birthday'><br/>
                <input type ="submit" value = "提交到Request">
            </form>
        </div>
        <div>
            <a href="annotation/GetRequest">getRequest</a>
        </div>

    show.jsp

    <%--
      Created by IntelliJ IDEA.
      User: Administrator
      Date: 10/22/2019
      Time: 1:19 PM
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
    <html>
    <head>
        <title>Show</title>
    </head>
    <body>
        <div>
            request域
        </div>
        <div>
            name = ${requestScope.account.name}
        </div>
        <div>
            password = ${requestScope.account.password}
        </div>
        <div>
            user.name = ${requestScope.account.user.name}
        </div>
        <div>
            user.age = ${requestScope.account.user.age}
        </div>
        <div>
            user.birthday = ${requestScope.account.user.birthday}
        </div>
        <div>
            Session域
        </div>
        <div>
            name = ${sessionScope.account.name}
        </div>
        <div>
            password = ${sessionScope.account.password}
        </div>
        <div>
            user.name = ${sessionScope.account.user.name}
        </div>
        <div>
            user.age = ${sessionScope.account.user.age}
        </div>
        <div>
            user.birthday = ${sessionScope.account.user.birthday}
        </div>
    </body>
    </html>

    输入1

    输出1

     可以看到session域中没有值,request域中有值

    request域中model的生命周期只有一次request

    输入2

    输出2

    user部分有值是因为之前

    https://www.cnblogs.com/clamp7724/p/11714776.html

    测试常用注解的时候写的预处理方法里赋的。

    在controller class的上面加上注解

    @SessionAttributes(value = {"account"}, types = {Account.class})

    value是参数名,types是参数类型

    这个注解会把model中的account属性和值存入session域,这个值不会随着request结束而消亡。在下次request的时候,如果model即使中没有account,SessionAttributes也会把account和值塞进model中。

    加入注解后的整个class

    package hello_word.controller;
    
    
    import hello_word.domain.Account;
    import hello_word.domain.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.*;
    
    import java.text.Annotation;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    
    @SessionAttributes(value = {"account"}, types = {Account.class})
    @Controller
    @RequestMapping(path = "/annotation")
    public class AnnotationController {//比如一个网站用户注册网站旗下游戏账号时,自己的信息可以直接从网站获得,不需要填写。所以可以用modelAttribute预处理数据
        //预处理部分,会在该class下的每个controller执行之前执行
        @ModelAttribute
        public Account dealWithNullAttribute(String name){
            System.out.println("新增用户:" + name);
            //模拟查询数据库后获得了user信息
            User user = new User();
            user.setName("张三");
            user.setAge(20);
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
            Date d = new Date();
            try {
                d = simpleDateFormat.parse("1990-05-26");
            } catch (ParseException e) {
                e.printStackTrace();
            }
            user.setBirthday(d);
            Account account = new Account();
            account.setUser(user);
            return account;
        }
    
    
    
        //set
        @RequestMapping(path = "/SetRequest")
        public String setRequestTest(Model model, Account account){  //Model 是spring中的一个类,里面有一个map可以存值和传递
            model.addAttribute("account", account);//把前台传过来的的值赋值给Account对象,存入model中,键值(key)为account1
            return "show";
        }
    
        //get
        @RequestMapping(path = "/GetRequest")
        public String getRequestTest(ModelMap modelMap){  //modelMap 是spring中的一个类,继承了linkedHashMap
            System.out.println("" + modelMap.get("account"));
            return "show";
        }
    
    }

    输入1

    输出1

    输入2

    输出2

     可以看到,第二次只是单纯的链接,但是还是取到了输入1 保存的值

    如果想清空session

    可以加方法

        //clean
        @RequestMapping("/CleanRequest")
        public String cleanRequestTest(SessionStatus sessionStatus){
            sessionStatus.setComplete();
            return "show";
        }

    执行后

  • 相关阅读:
    Django REST framework的解析器与渲染器
    python基础之 数据格式化
    REST framework 之 分页
    Django REST framework 之 认证 权限 限制
    DjangoRestFrameWork 版本控制
    DjangoRESTFrameWork中的视图
    浏览器跨域问题
    初识REST
    vue之生命周期
    vue组件
  • 原文地址:https://www.cnblogs.com/clamp7724/p/11719639.html
Copyright © 2020-2023  润新知