一、REST风格URL
创建一个新的Maven工程,导入依赖,添加Framework Support,选择Web,配置web.xml,创建Spring MVC的配置文件,点击Project Structure,在Artifacts目录下选择WEB-INF,点击创建lib文件夹,并将右侧的jar导入新建的lib文件夹下,配置Tomcat,配置项目请求地址为/,启动Tomcat
@Controller public class TeslaController { @RequestMapping(value = "/tesla/{name}", method = RequestMethod.GET) public String get(@PathVariable("name") String name){ System.out.println("查询Tesla车型:" + name); return "success"; } @RequestMapping(value = "/tesla", method = RequestMethod.POST) public String add(){ System.out.println("增加Tesla车型"); return "success"; } @RequestMapping(value = "/tesla/{name}", method = RequestMethod.PUT) public String update(@PathVariable("name") String name){ System.out.println("更新Tesla车型:" + name); return "success"; } @RequestMapping(value = "/tesla/{name}", method = RequestMethod.DELETE) public String delete(@PathVariable("name") String name){ System.out.println("删除Tesla车型:" + name); return "success"; } } 复制代码
index.jsp页面
<h3>查询Tesla</h3> <a href="/tesla/cybertruck">Cybertruck</a> <h3>增加Tesla车型</h3> <form action="/tesla" method="post"> <button type="submit">增加Semi Truck</button> </form> <h3>更新Tesla车型</h3> <a href="/tesla/model3">更新Model 3</a> <h3>删除Tesla车型</h3> <a href="/tesla/roadster">删除Roadster</a> 复制代码
逐个点击,查看控制台输出,其中更新和删除最终调用的是get()方法
想要从页面发起PUT和DELETE请求需要用到Spring MVC中的HiddenHttpMethodFilter,可以将普通请求转换为PUT和DELETE请求 在web.xml中配置Filter
<!--Rest支持--> <filter> <filter-name>hiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>hiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 复制代码
改造页面的请求,使用表单发起PUT和DELETE请求
<h3>更新Tesla车型</h3> <form action="/tesla/model3" method="post"> <input type="hidden" name="_method" value="put"> <button type="submit">更新Model 3</button> </form> <h3>删除Tesla车型</h3> <form action="/tesla/roadster" method="post"> <input type="hidden" name="_method" value="delete"> <button type="submit">删除Roadster</button> </form> 复制代码
点击更新和删除按钮,控制台输出相应的内容
解决页面报错的问题,增加isErrorPage="true"
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %> 复制代码
二、获取请求参数
默认方式获取请求中参数的值
- 在方法入参中增加一个和请求中参数名相同的参数,就可以接收请求中参数的值
- 如果请求中没有输入参数,则控制器方法中参数的值为null
新建一个ParamController
@Controller public class ParamController { @RequestMapping("/param") public String getParam(String username){ System.out.println("请求中的传输的数据为:" + username); return "success"; } } 复制代码
浏览器中输入http://localhost:8080/param?username=stark
@RequestParam注解获取请求中的参数的值
ParamsController中增加方法
@RequestMapping("/param") public String getParam(@RequestParam("user") String username){ System.out.println("请求中的传输的数据为:" + username); return "success"; } 复制代码
浏览器中输入http://localhost:8080/param?user=stark
@RequestParam("user")这句代码就相当于
request.getParameter("user") 复制代码
@RequestParam的属性
- value:指定要获取参数的参数名
- required:参数是否是必传的,默认为true,必传
- defaultValue:指定参数默认值,默认为null
测试required属性
启动tomcat,浏览器输入http://localhost:8080/param, 不带user参数会报错
修改getParam方法,在@RequestParam中增加属性required=false,重启Tomcat,再次访问http://localhost:8080/param
不传user参数,页面不再报错,并且user默认的值为null
测试defaultValue属性
给getParam方法增加,defaultValue属性,defaultValue=“默认值”,浏览器输入http://localhost:8080/param, 控制台打印出设置的默认值
@RequestHeader注解获取请求头
获取请求中的Key的值,在ParamController中新增方法getHeaders
@RequestMapping("/headers") public String getHeaders(@RequestHeader(value = "User-Agent",required = false, defaultValue = "默认值") String userAgent){ System.out.println("请求头中的Key User-Agent的值为:" + userAgent); return "success"; } 复制代码
浏览器中输入http://localhost:8080/headers,控制台中打印出User-Agent的值,与@RequestParam有三个同样的属性,且用法一致