赶紧收藏!Spring MVC 万字长文笔记,我愿奉你为王者笔记! (2)

创建 Handler

package org.westos.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author lwj * @date 2020/12/13 22:29 */ @Controller public class HelloHandler { @RequestMapping("/index") public String index() { System.out.println("执行了index..."); return "index"; } }

配置Tomcat服务器,启动,运行,成功。

:8080/index

Spring MVC 注解

@RequestMapping

Spring MVC 通过 @RequestMapping 注解将 URL 请求与业务方法进行映射,在 Handler 的类定义处和方法定义处都可以添加 @RequestMapping ,在类定义处添加,相当于客户端多了一层访问路径;

@Controller

@Controller 在类定义处添加,将该类交给 IoC 容器来管理(结合 springmvc.xml 的自动扫描配置使用),同时使其成为一个控制器,可以接收客户端请求;

package org.westos.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author lwj * @date 2020/12/13 22:29 */ @Controller @RequestMapping("/hello") public class HelloHandler { @RequestMapping("/index") public String index() { System.out.println("执行了index..."); return "index"; } }

:8080/hello/index

@RequestMapping 相关参数

1、value:指定URL请求的实际地址,是 @RequestMapping 的默认值。

@RequestMapping("/index") public String index() { System.out.println("执行了index..."); return "index"; }

等于

@RequestMapping(value = "/index") public String index() { System.out.println("执行了index..."); return "index"; }

2、method:指定请求的Method类型,GET、POST、PUT、DELETE。

@RequestMapping(value = "/index", method = RequestMethod.GET) public String index() { System.out.println("执行了index..."); return "index"; }

上述代码表示 index 方法只可以接收 GET 请求。

使用Postman工具来模拟一个POST请求访问index方法。

在这里插入图片描述

3、params:指定请求中必须包含某些参数,否则无法调用该方法。

@RequestMapping(value = "/index", method = RequestMethod.GET, params = {"name", "id=5"}) public String index() { System.out.println("执行了index..."); return "index"; }

上述代码表示请求中必须包含 name 和 id 两个参数,并且 id 的值必须是5。

:8080/hello/index?name=zhangsan&id=5

关于参数绑定,在形参列表中通过添加 @RequestParam 注解完成 HTTP 请求参数与业务方法形参的映射。

(当请求参数名和方法形参名一致时,可以不用添加 @RequestParam 注解)

@RequestMapping(value = "/index", method = RequestMethod.GET, params = {"name", "id=5"}) public String index(@RequestParam("name") String str, @RequestParam("id") int age) { System.out.println("执行了index..."); System.out.println(str); System.out.println(age); return "index"; }

上述代码表示将请求的参数 name 和 id 分别赋给形参 str 和 age,同时自动完成了数据类型转换,将字符串"10"转换为 int 类型的10,再赋给 age,这些工作都是由 HandlerAdapter 完成。

Spring MVC 同时支持 RESTful 风格的 URL 。

传统类型::8080/hello/index?name=zhangsan&id=5

RESTful::8080/hello/rest/zhangsan/10

@RequestMapping(value = "/rest/{name}/{id}") public String rest(@PathVariable("name") String name, @PathVariable("id") int id) { System.out.println(name); System.out.println(id); return "index"; }

通过 @PathVariable 注解完成请求参数与形参的映射。

映射 Cookie

Spring MVC 通过映射可以直接在业务方法中获取Cookie的值。

@RequestMapping(value = "/cookie") public String cookie(@CookieValue(value = "JSESSIONID") String sessionId) { System.out.println(sessionId); return "index"; }

使用 JavaBean 绑定参数

Spring MVC 会根据请求参数名和 JavaBean 属性名进行自动匹配,自动为对象填充属性值,同时支持级联属性。

package org.westos.entity; import lombok.Data; /** * @author lwj * @date 2020/12/19 15:57 */ @Data public class Address { private String value; } package org.westos.entity; import lombok.Data; /** * @author lwj * @date 2020/12/19 15:58 */ @Data public class User { private long id; private String name; private Address address; } <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%--页面上的路径与重定向是需要添加Web项目的上下文路径的--%> <form action="/hello/register" method="post"> <label for="id">用户id:</label> <input type="text"> <br> <label for="name">用户名:</label> <input type="text"> <br> <label for="value">用户地址:</label> <input type="text"> <br> <input type="submit" value="注册"> </form> </body> </html> @RequestMapping(value = "/register", method = RequestMethod.POST) public String register(User user) { System.out.println(user); return "index"; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpddsd.html