就目前而言,客户端浏览器中的form表单只支持GET与POST这两种方式请求,而DELETE、PUT等其他的MethodType并不支持。
SpringMVC框架中的Spring3.0添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求。
这个过滤器(filter)叫做HiddenHttpMethodFilter, 添加这个过滤器需要在Web Project中的web.xml中添加如下过滤器配置信息:
定义一个过滤器:
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
配置过滤器的映射:
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<servlet-name>springDispatcherServlet</servlet-name> //默认会自动配置
<url-pattern>/*</url-pattern>
</filter-mapping>
Waring: 其中springDispatcherServlet是DispatcherServlet的servlet-name的名称, 配成其他如/*等之类的页面请求会报错。
<!-- 配置隐藏HTTP服务请求方式的过滤器 -->
<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>
<!-- The front controller of this Spring Web application, responsible for handling all application requests -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath: SpringMVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
//添加用户
@RequestMapping(value="/add",method=RequestMethod.POST)
public String userAdd(){
System.out.println("-----add");
return SUCCESS;
}
//删除用户
@RequestMapping(value="/del",method=RequestMethod.DELETE)//添加支持HttpMethod的Delete请求,下文有注意事项,请仔细看
public String userDel(){
System.out.println("-----del");
return SUCCESS;
}
//更新用户
@RequestMapping(value="/update",method=RequestMethod.PUT)
public String userUpdate(){
System.out.println("-----put");
return SUCCESS;
}
//获取用户
@RequestMapping(value="/get",method=RequestMethod.GET)
public String userGet(){
System.out.println("-----get");
return SUCCESS;
}
页面提交方式需转换成post提交方式(可写jquery方式提交表单)。
需要在页面上添加隐藏域告诉controller此请求是哪种请求方式:
<h2>User Add</h2>
<form action="user/add" method="post">
<input type="hidden" name="_method" value="POST"> //隐藏域
//注意:value="POST"这里的POST一定要与你Controller层中添加支持HttpMethod的请求类型一致,否则会报501的错误。
<input type="submit" value="添加">
</form>
<h2>User Del</h2>
<form action="user/del" method="post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="删除">
</form>
<h2>User Update</h2>
<form action="user/update" method="post">
<input type="hidden" name="_method" value="PUT">
<input type="submit" value="更新">
</form>
<h2>User Get</h2>
<form action="user/get" method="post">
<input type="hidden" name="_method" value="GET">
<input type="submit" value="获取">
</form>
<input type="hidden" name="_method" value="DELETE"/>
<input type="hidden" name="_method" value="PUT"/>
这样,就可实现添加支持HttpMethod的DELETE和PUT 等等请求方式了。
需要在页面上添加隐藏域告诉controller此请求是哪种请求方式: