一、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有三个同样的属性,且用法一致
