← 返回首页
SpringMVC教程(七)
发表时间:2020-06-01 16:28:06
ModelAttribute

SpringMVC处理请求的Controller可以在请求范围内保存属性。

项目结构图 如下:

1.使用Model保存属性。

创建Users实体类如下。

package com.entity;

public class Users {

    private String username;
    private String password;

    public Users() {
    }

    public Users(String username, String password) {
        this.username = username;
        this.password = password;
    }

    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 "Users{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

UsersController如下:

package com.controller;

import com.entity.Users;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("users")
public class UsersController {

    //处理登录请求。
    @RequestMapping(value="login",method ={RequestMethod.GET,RequestMethod.POST})
    public String login(Users user, Model model){
        System.out.println("执行用户登录...");
        System.out.println(user);
        model.addAttribute("loginUser",user);
        return "login_success";
    }

    //以上代码完全等同于使用HttpServletRequest方式。
    /*
    @RequestMapping(value="login",method ={RequestMethod.GET,RequestMethod.POST})
    public String login(Users user, HttpServletRequest request){
        System.out.println("执行用户登录...");
        System.out.println(user);
        //model.addAttribute("loginUser",user);
        request.setAttribute("loginUser",user);
        return "login_success";
    }*/

    //使用ModelAndView方式保存属性
    /*
    public ModelAndView login(Users user){
        ModelAndView mv = new ModelAndView();
        System.out.println("执行用户登录...");
        System.out.println(user);
        mv.setViewName("login_success");
        mv.addObject("loginUser",user);
        return mv;
    }*/

}

login_success.jsp视图如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
</head>
<body>
<h1>登录成功</h1>
<hr>
<div>
    用户名:${loginUser.username}<br>
    密码:${loginUser.password}<br>
</div>
</body>
</html>

使用PostMan测试登录请求。

2.使用@ModelAttribute注解

UsersController改写如下:

package com.controller;

import com.entity.Users;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("users")
public class UsersController {

    @RequestMapping(value="login",method ={RequestMethod.GET,RequestMethod.POST})
    public String login(@ModelAttribute("loginUser") Users user){
        System.out.println("执行用户登录...");
        System.out.println(user);
        return "login_success";
    }


}

使用PostMan测试登录请求。

小结: Controller在处理请求的同时可以在web的request范围保存属性,但是考虑到目前前后端分离开发的大趋势,这样做的意义已经不大,大家仅仅需要基本了解即可。