学习SpringMVC的第一天
使用@RequestMapping映射请求
文章目录
一、修饰类与方法的不同
在包下新建SpringMVCTest.java测试类
@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest {
private static final String SUCCESS = "success";
/**
* 1.@RequestMapping除了修饰方法,还可以修饰类
* 2.
* 1)类定义处:提供初步的请求映射信息。相对于WEB应用的根目录
* 2)方法处:提供进一步的细分信息。
* 相对于类定义处的URL。若类定义处未标注@RequestMapping,则方法处标记的URL相对于WEB应用的根目录
*
*/
@RequestMapping("/testRequestMapping")
public String testRequestMapping() {
System.out.println("testRequestMapping");
return SUCCESS;
}
}
在index.jsp中添加链接
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a href="springmvc/testRequestMapping">testRequestMapping</a>
<br>
<a href="helloworld">Hello World</a>
</body>
</html>
运行结果
二、使用method属性来指定请求方式
@RequestMapping(value="/testMethod",method=RequestMethod.POST)
public String testMethod() {
System.out.println("testMethod");
return SUCCESS;
}
<form action="springmvc/testMethod" method="POST">
<input type="submit" value="submit"/>
</form>
三、@PathVariable
/**
* @PathVariable 可以来映射URL中的占位符到目标方法的参数中
*/
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable(value="id") Integer id) {
System.out.println("testPathVariable" + id);
return SUCCESS;
}
<a href="springmvc/testPathVariable/1">testPathVariable</a>
效果
四、REST:(资源)表现层状态转化,一种互联网软件架构
在web.xml中配置org.springframework.web.filter.HiddenHttpMethodFilter
<!--
配置org.springframework.web.filter.HiddenHttpMethodFilter: 可以把POST请求转为DELETE 或 POST请求
-->
<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>
/**
* Rest 风格的 URL
* 以CRUD 为例:
* 新增: /order POST
* 修改: /order/1 PUT update?id=1
* 获取: /order/1 GET get?id=1
* 删除: /order/1 DELETE delete?id=1
* 如何发送PUT请求和DELETE请求?
* 1.需要配置HiddenHttpMethodFilter
* 2.需要发送POST 请求
* 3.需要在发送POST 请求时携带一个name="_method"的隐藏域,值为DELETE或PUT
*
* 在SpringMVC 的目标方法中如何得到 id 呢?
* 使用@PathVariable 注解
*
*/
@RequestMapping(value = "/testRest/{id}",method=RequestMethod.GET)
public String testRestGet(@PathVariable Integer id) {
System.out.println("testRest GET:" + id);
return SUCCESS;
}
@RequestMapping(value = "/testRest",method=RequestMethod.POST)
public String testRestPost() {
System.out.println("testRest POST");
return SUCCESS;
}
@RequestMapping(value = "/testRest/{id}",method=RequestMethod.DELETE)
public String testRestDelete(@PathVariable Integer id) {
System.out.println("testRest DELETE:" + id);
return SUCCESS;
}
@RequestMapping(value = "/testRest/{id}",method=RequestMethod.PUT)
public String testRestPut(@PathVariable Integer id) {
System.out.println("testRest PUT:" + id);
return SUCCESS;
}
<a href="springmvc/testRest/1">Test Rest Get</a>
<br>
<form action="springmvc/testRest" method="post">
<input type="submit" value="TestRest POST"/>
</form>
<br>
<form action="springmvc/testRest/1" method="post">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="TestRest DELETE"/>
</form>
<br>
<form action="springmvc/testRest/1" method="post">
<input type="hidden" name="_method" value="PUT"/>
<input type="submit" value="TestRest PUT"/>
</form>
注意:Tomcat 8.0以上在success.xml做以下修改,否则405警告
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="UTF-8" isErrorPage="true"%>
五、使用@RequestParam绑定请求参数值
/**
* value 值即请求参数的参数名
* required该参数是否必须,默认true
* defaultValue请求参数的默认值
*/
@RequestMapping(value="/testRequestParam")
public String testRequestParam(@RequestParam(value="username") String un,
@RequestParam(value="age",required=false,defaultValue="0") int age) {
System.out.println("RequestParam username:" + un + ",age:" + age);
return SUCCESS;
}
<a href="springmvc/testRequestParam?username=at&age=21">Test RequestParam</a>