二、请求映射处理
1.@RequestMapping
作用:将请求和处理请求的控制器方法关联起来,建立映射关系。
@RequestMapping用来匹配客户端发送的请求,可以在方法上使用, 也可以在类上使用。
方法:表示用来匹配要处理的请求
类上:表示为当前类的所有方法的请求地址添加一个前置路径,访问 的时候必须要添加此路径
@RequestMapping就是用来标识此方法用来处理什么请求,其中的/可以取消
取消后默认也是从当前项目的根目录开始查找,一般在编写的时候看个人习惯
同时,@RequestMapping也可以用来加在类上,
@RequestMapping("/bobo1") public String bobo1(User user) { System.out.println(user); return "index.jsp"; }
2.@PathVariable
此注解就是提供了对占位符URL的支持,就是将URL中占 位符参数绑定到控制器处理方法的参数中。
@PathVariable 用在参数上面的 专门用来获取URL目录级别的参数
比如 http://localhost:8080/springmvc/path/user/123/xushu 要获得123 @RequestMapping(“/user/{id}”) : @PathVariable(“id”) Int eger id 10
示例:
@RequestMapping("/user/{id}/{username}") public String path01(@PathVariable("id") Integer id,@PathVariable("username") String name) { System.out.println(id); System.out.println(name); return "/index.jsp"; }
3.REST
REST即表述性状态传递(英文:Representational State Transfer, 简称REST)是RoyFielding博士在2000年他的博士论文中提出来的一种软件架 构风格。
它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。 一种相较与之前URL所产生一种更优雅的URL风格
如果是原来的架构风格,需要发送四个请求,分别是?
查询用户:http://localhost:8080/app/user.do?action=getUser&id=xxx GET 增加用户:
http://localhost:8080/app/user_add.do POST 修改用户:
http://localhost:8080/app/xiugaiuser.do POST 删除用户:
http://localhost:8080/app/delete.do?id=1 GET/POST
让不同的请求方式表示不同的请求类型就可以简化我们 的查询,改成名词
看URL就知道要什么看http method就知道干什么
查询用户: http://localhost:8080/xxx/user/1 GET 查询
查询多个用户: http://localhost:8080/xxx/users GET
新增用户: http://localhost:8080/xxx/user POST 新增
修改用户: http://localhost:8080/xxx/user/1 PUT 修改
删除用户:http://localhost:8080/xxx/user/1 DELETE 删除
对网络上所有的资源都有一个资源标志符;
对资源的操作不会改变标识符;
同一资源有多种表现形式(xml、json);
所有操作都是无状态的(Stateless)
符合上述REST原则的架构方式称为RESTful
HiddenHttpMethodFilter:浏览器 form 表单只支持 GET与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与DELETE 请求。
在web.xml中配置过滤器,来实现delete和put方法
<!-- 处理html不支持rest中put和delete--> <filter> <filter-name>hiddenHttpMethod</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>hiddenHttpMethod</filter-name> <servlet-name>springmvc</servlet-name> </filter-mapping>
@Controller @RequestMapping("/rest") public class RestController { // 查询 @GetMapping("/user/{id}") public String get(@PathVariable("id") Integer id){ System.out.println("查询用户:"+id); return "/index.jsp"; } // 新增 @PostMapping("/user") public String add(User user){ System.out.println("新增用户:"+user); return "/index.jsp"; } // 修改 @PutMapping("/user/{id}") public String update(User user){ System.out.println("修改用户:"+user); return "/index.jsp"; } // 删除 @DeleteMapping("/user/{id}") public String delete(@PathVariable("id") Integer id){ System.out.println("删除用户:"+id); return "/index.jsp"; } }
4.静态资源的访问
当页面中包含静态资源的时候我们能够正确的获取到吗?
在自己设置的xml文件中加入一个配置
我这里图片放在web文件夹下的image文件夹中
<mvc:default-servlet-handler/> <!-- <mvc:annotation-driven></mvc:annotation-driven>--> <mvc:resources mapping="/images/**" location="/image/"/>
访问静态资源,只要在xml文件中加入如下配置即可:
<mvc:default-servlet-handler/> <mvc:annotation-driven></mvc:annotation-driven>