ant风格的请求路径
?
单字符
*
任意个字符(0或多个)
** 任意目录
@RequestMapping(value=“welcome3/**/test”)
接受示例:
a href=“welcome3/abc/xyz/abccc/test”
<a href="handler/welcome5/zs">...</a>
通过@PathVariable获取动态参数
public String welcome5(@PathVariable("name") String name ) {
System.out.println(name);
return "success" ;
}
REST风格:软件编程风格
Springmvc:
GET:查
POST:增
DELETE:删
PUT:改
普通浏览器只支持get、post方式;其他请求方式如delelte、put请求是通过过滤器新加入的支持。
springmvc实现:put、post请求方式的步骤
a.增加过滤器
<!-- 增加HiddenHttpMethodFilte过滤器:目的是给普通浏览器增加put|delete请求方式 -->
<filter>
<filter-name>HiddenHttpMethodFilte</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilte</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
b.表单
<form action="handler/testRest/1234" method="post">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="删">
</form>
i:必须是post方式
ii:通过隐藏域的value值设置实际的请求方式DELETE|PUT
c.控制器
@RequestMapping(value="testRest/{id}",method=RequestMethod.DELETE)
public String testDelete(@PathVariable("id") Integer id) {
System.out.println("delete:删 " +id);
//Service层实现真正的删
return "success" ;
}
通过method=RequestMethod.DELETE匹配具体的请求方式
此外,可以发现,当映射名相同时@RequestMapping(value="testRest),可以通过method处理不同的请求。
<form action="handler/testRest/1234" method="post">
<input type="submit" value="增">
</form>
<form action="handler/testRest/1234" method="post">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="删">
</form>
<form action="handler/testRest/1234" method="post">
<input type="hidden" name="_method" value="PUT"/>
<input type="submit" value="改">
</form>
<form action="handler/testRest/1234" method="get">
<input type="submit" value="查">
</form>
@RequestParam(“uname”) String name,@RequestParam(value=“uage”,required=false,defaultValue=“23”)
@RequestParam(“uname”):接受前台传递的值,等价于request.getParameter(“uname”);
required=false:该属性不是必须的
defaultValue=“23”:默认值23
@RequestMapping(value="testParam")
public String testParam(@RequestParam("uname") String name,@RequestParam(value="uage",required=false,defaultValue="23") Integer age) {
// String name = request.getParameter("uname");
System.out.println(name);
System.out.println(age);
return "success" ;
}
<form action="handler/testParam" method="get">
name:<input name="uname" type="text" />
<input type="submit" value="查">
</form>
获取请求头信息@RequestHeader
public String testRequestHeader(@RequestHeader("Accept-Language") String al ) {
通过@RequestHeader(“Accept-Language”) String al 获取请求头中的Accept-Language值,并将值保存再al变量中
通过mvc获取cookie值(JSESSIONID)
@CookieValue
(前置知识:服务端在接受客户端第一次请求时,会给该客户端分配一个session(该session包含一个sessionId)),
并且服务端会在第一次响应客户端时,请该sessionId赋值给JSESSIONID并传递给客户端的cookie中。
@RequestMapping(value="testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String jsessionId) {
System.out.println( jsessionId);
return "success" ;
}
小结:
SpringMVC处理各种参数的流程/逻辑:
请求:前端发请求a -> @RequestMappting(“a”)
处理请求中的参数xyz:
@RequestMappting(“a”)
public String aa(@Xxx注解(“xyz”) xyz) {
}
使用对象(实体类Student)接受请求参数
@RequestMapping(value="testObjectProperties")
public String testObjectProperties(Student student) {//student属性必须和form表单中的属性Name值一致(支持级联属性)
/*
String name = request.getParameter("name");
int age= Integer.parseInt(request.getParameter("age")) ;
String haddrss = request.getParameter("homeaddress");
String saddress = request.getParameter("schooladdress");
Address address = new Address();
address.setHomeAddress(haddrss);
address.setSchoolAddress(saddress);
Student student = new Student();
student.setName(name);
student.setName(age);
student.setAddress(address);
*/
System.out.println(student.getId()+","+student.getName()+","+student.getAddress().getHomeAddress()+","+student.getAddress().getSchoolAddress());
return "success" ;
}
<form action="handler/testObjectProperties" method="post">
id:<input name="id" type="text" />
name:<input name="name" type="text" />
家庭地址:<input name="address.homeAddress" type="text" />
学校地址:<input name="address.schoolAddress" type="text" />
<input type="submit" value="查">
</form>
在SpringMVC中使用原生态的Servlet API:HttpServletRequest---->直接将servlet-api中的类、接口等写在springMVC所映射的方法参数中即可:
@RequestMapping(value="testServletAPI")
public String testServletAPI(HttpServletRequest request,HttpServletResponse response) {
// request.getParameter("uname") ;
System.out.println(request);//不需要new();
return "success" ;
}