SpringMVC入门——day02:SpringMVC常用注解

1. RequestParam

在这里插入图片描述

示例:(在上篇代码的基础上进行编写)

webapp — anno.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="anno/testRequestParam?name=哈哈">RequestParam</a>
</body>
</html>

controller — AnnoController.java

@Controller
@RequestMapping("/anno")
public class AnnoController {

    @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam(value = "name") String username) {
        System.out.println("执行了。。。");
        System.out.println(username);
        return "success";
    }
}

正常运行。
@RequestParam(value = “name”) 中的 “name” 必须和anno.jsp 中 name=哈哈" 相同。

2. RequestBody(用于异步)

在这里插入图片描述
anno.jsp

    <form action="anno/testRequestBody" method="post">
        用户姓名:<input type="text" name="username"><br/>
        用户年龄:<input type="text" name="age"><br/>
        <input type="submit" value="提交">
    </form>

AnnoController

    //RequestBody:获取请求体内容
    @RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String body) {
        System.out.println("执行了。。。");
        System.out.println(body);
        return "success";
    }

输出:
在这里插入图片描述

3. PathVariable

在这里插入图片描述
anno.jsp:

<a href="anno/testPathVariable/10">testPathVariable</a>

AnnoAnnoController.java:

    //PathVariable:用于绑定url中的占位符
    @RequestMapping("/testPathVariable/{sid}")
    public String testPathVariable(@PathVariable(name = "sid") String id) {
        System.out.println("执行了。。。");
        System.out.println(id);
        return "success";
    }

在这里插入图片描述

restful 编程风格

  • rest——英文:Representational State Transfer——中文:表现层状态转化
  • HTTP 协议里面,四个表示操作方式的动词: GET、 POST、 PUT、DELETE。它们分别对应四种基本操作: GET 用来获取资源, POST 用来新建资源, PUT 用来更新资源, DELETE 用来删除资源。
  • restful 的实例:
    HTTP GET : /account/1 —— 得到 id = 1 的 account
    HTTP DELETE: /account/1 —— 删除 id = 1 的 account
    HTTP PUT: /account/1 —— 更新 id = 1 的 account
    HTTP POST: /account —— 新增 account
    在这里插入图片描述

4. RequestHeader

在这里插入图片描述
anno.jsp:

<a href="anno/testRequestHeader">testRequestHeader</a>

AnnoController.java:

    //RequestHeader:用于获取请求消息头
    @RequestMapping("/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value = "Accept") String header) {
        System.out.println("执行了。。。");
        System.out.println(header);
        return "success";
    }

5. CookieValue

在这里插入图片描述
anno.jsp:

<a href="anno/testCookieValue">testCookieValue</a>

AnnoController.java:

    //CookieValue:用于获取Cookie的值
    @RequestMapping("/testCookieValue")
    public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookie) {
        System.out.println("执行了。。。");
        System.out.println(cookie);
        return "success";
    }

6. ModelAttribute

在这里插入图片描述
anno.jsp:

    <form action="anno/testModelAttribute" method="post">
        用户姓名:<input type="text" name="username"><br/>
        用户年龄:<input type="text" name="age"><br/>
        <input type="submit" value="提交">
    </form>

AnnoController.java:

    //ModelAttribute
    @RequestMapping("/testModelAttribute")
    public String testModelAttribute() {
        System.out.println("testModelAttribute执行了。。。");
        return "success";
    }
    @ModelAttribute
    public void showUser(){
        System.out.println("showUser执行了。。。");
    }

在这里插入图片描述

ModelAttribute的应用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。

① ModelAttribute 修饰的方法无返回值
AnnoController.java:

    //ModelAttribute
    @RequestMapping("/testModelAttribute")
    public String testModelAttribute(@ModelAttribute(value = "abc") User user) {
        System.out.println("testModelAttribute执行了。。。");
        System.out.println(user);
        return "success";
    }

    //该方法会先执行
    //无返回值
    @ModelAttribute
    public void showUser(String uname, Map<String, User> map) {
        System.out.println("showUser执行了。。。");
        //通过用户查询数据库(模拟)
        User user = new User();
        user.setUname(uname);
        user.setAge(20);
        user.setDate(new Date());
        map.put("abc", user);
    }

在这里插入图片描述
② ModelAttribute 修饰的方法带返回值

    //ModelAttribute
    @RequestMapping("/testModelAttribute")
    public String testModelAttribute(User user) {
        System.out.println("testModelAttribute执行了。。。");
        System.out.println(user);
        return "success";
    }

    //该方法会先执行
    //有返回值
    @ModelAttribute
    public User showUser(String uname) {
        System.out.println("showUser执行了。。。");
        //通过用户查询数据库(模拟)
        User user = new User();
        user.setUname(uname);
        user.setAge(20);
        user.setDate(new Date());
        return user;
    }

7. SessionAttribute

在这里插入图片描述
succsee.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Success</title>
</head>
<body>
    <h3>入门成功h3</h3>

    ${ msg }
    ${ sessionScope }
</body>
</html>

anno.jsp:

    <a href="anno/testSessionAttributes">testSessionAttributes</a>
    <a href="anno/getSessionAttributes">getSessionAttributes</a>
    <a href="anno/delSessionAttributes">delSessionAttributes</a>

AnnoController.java:

    //SessionAttributes:用于多次执行控制器方法间的参数共享
    //添加值
    @RequestMapping("/testSessionAttributes")
    public String testSessionAttributes(Model model) {
        System.out.println("testSessionAttributes。。。");
        model.addAttribute("msg", "开发");
        return "success";
    }
    //获取值
    @RequestMapping("/getSessionAttributes")
    public String getSessionAttributes(ModelMap modelMap) {
        System.out.println("testSessionAttributes。。。");
        String msg = (String) modelMap.get("msg");
        System.out.println(msg);
        return "success";
    }
    //清除值
    @RequestMapping("/delSessionAttributes")
    public String delSessionAttributes(SessionStatus status) {
        System.out.println("delSessionAttributes。。。");
        status.setComplete();
        return "success";
    }

猜你喜欢

转载自blog.csdn.net/dl674756321/article/details/90734010