SpringMVC过滤器HiddenHttpMethodFilt
2019-03-03 本文已影响0人
花无缺_0159
一般来说,资源操有查询,新增,删除,更改四种类型,对应HTTP协议中四类请求:GET,POST,DELETE,PUT。
未声明情况下浏览器默认使用GET提交请求。
需要注意的是,普通浏览器只支持GET,POST方式 ,其他请求方式如DELETE|PUT必须通过过滤器的支持才能实现。
Spring自带了一个过滤器HiddenHttpMethodFilter,支持GET、POST、PUT、DELETE请求。
使用方法很简单,下面展示通用流程的部分代码:
1.在web.xml中增加过滤器。
<!-- 增加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>
2.前端表单。
<form action="handler/testRest/1234" method="post">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="删">
</form>
method必须是POST,然后设置隐藏域的value值(DELETE|PUT)。
3.控制器。
@RequestMapping(value="testRest/{id}",method=RequestMethod.DELETE)
public String testDelete(@PathVariable("id") Integer id) {
System.out.println("delete:删 " +id);
//Service层省略
return "success" ;
}
当映射名相同时@RequestMapping(value="testRest),通过指定method=RequestMethod.xx可以处理不同的请求(xx为GET,POST,DELETE,PUT)。
以上就是HiddenHttpMethodFilter的基本使用。
PS:
1.实体类和form表单参数一致时,使用SpringMVC可以轻松把信息传入并保存(支持级联属性)。
比如有一个Student类(成员变量id,name,addrss(homeAddress、schoolAddress))。
表单页面提交信息 :
<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>
控制器直接获取并保存:
@RequestMapping(value="testObjectProperties")
public String testObjectProperties(Student student) {
System.out.println(student.getId()+","+student.getName()+","+student.getAddress().getHomeAddress()+","+student.getAddress().getSchoolAddress());
return "success" ;
}
2.在SpringMVC中使用原生态的Servlet API :HttpServletRequest :直接将 servlet-api中的类、接口等写在springMVC所映射的方法参数中即可。
@RequestMapping(value="testServletAPI")
public String testServletAPI(HttpServletRequest request,HttpServletResponse response) {
//request.getParameter("uname") ;不用再新建保存了
System.out.println(request);
return "success" ;
}