<h3>※ .请求方法映射限定</h3>
<p> 一般获取数据为GET请求方法,提交表单一般为POST请求方法。但之前URL路径映射方式对任意请求方法都是接受的,<br> 因此我们需要某种方式来告诉相应的功能处理方法只处理如GET方式的请求或POST方式的请求。</p>
<p> </p>
<pre class="blockcode"><code> @RequestMapping(value="/user/{userId:\\d+}",method=RequestMethod.GET)
可以匹配"/user/100",并且请求方式只能是GET
@RequestMapping(value="/hello", method={RequestMethod.POST,RequestMethod.GET})
可以匹配"/hello",并且请求方式只能是POST或者GET
</code></pre>
<p><br> 注意:<br> 1、一般浏览器只支持GET、POST请求方法,如想浏览<br> 器支持PUT、DELETE 等请求方法只能模拟。(jquery中的ajax函数可以发送这些方式的请求)<br> 2、除了GET、POST,还有HEAD、OPTIONS、PUT、DELETE、TRACE(观察servlet源码也可获知)<br> 3、DispatcherServlet默认开启对GET、POST、PUT、DELETE、HEAD 的支持;<br> 4、如果需要支持OPTIONS、TRACE,请添加DispatcherServlet 在web.xml 的初始化参数:dispatchOptionsRequest 和<br> dispatchTraceRequest 为true。(查看源码,在DispatcherServlet的父类中可以找到这个俩个属性)</p>
<pre class="blockcode"><code>1.控制器
package com.briup.web.annotation;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/*
* http://localhost:8888/jd1811_MVC/user/act
* @RequestMapping基于功能区分用的
*/
@Controller
@RequestMapping("/user")
public class ActionController {
// @RequestMapping("/test/{userid}")
/*
* method属性指定提交方式
*/
// @RequestMapping(value="/test/{userid}"
// ,method=RequestMethod.GET)
// @RequestMapping(value="/test/{userid}"
// ,method=RequestMethod.POST)
// @RequestMapping(value="/test/{userid}"
// ,method={RequestMethod.POST,RequestMethod.GET})
// public String method(@PathVariable String userid,String username){
// System.out.println(username+"&&&"+userid);
// return "hello";
// }
@RequestMapping(value="/test1"
,method=RequestMethod.POST)
public String method(@PathVariable String userid,String username){
System.out.println(username+"&&&"+userid);
return "hello";
}
@RequestMapping(value="/test1"
,method=RequestMethod.GET)
public String method1(@PathVariable String userid,String username){
System.out.println(username+"&&&"+userid);
return "hello";
}
}
2.设置返回视图spring.xml
<mvc:view-controller path="/regiser"
view-name="register"/>
3.返回视图
register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<base href="<%=basePath %>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<form action="user/test/tom"
method="post">
姓名<input type="text" name="username"/><br>
<input type="submit" value="注册"/>
</form>
</body>
</html></code></pre>
<h3>※ .请求参数映射限定(params)</h3>
<p> <strong>1) 请求数据中有指定参数名</strong><br> </p>
<pre class="blockcode"><code> @RequestMapping("/test")
@Controller
public class HomeController {
@RequestMapping(params="create",method=RequestMethod.GET)
public ModelAndView test1(){
return null;
}
@RequestMapping(params="create",method=RequestMethod.POST)
public ModelAndView test2(){
return null;
}
}</code></pre>
<p> 可以匹配的路径为:/test?create<br> 如果是get 方式的请求则访问test1方法<br> 如果是post方式的请求则访问test2方法</p>
<p><br> <strong> 2) 请求数据中没有指定参数名</strong><br> </p>
<pre class="blockcode"><code>@RequestMapping(params="!create", method=RequestMethod.GET)</code></pre>
<p><br> <strong> 3) 请求数据中指定参数名=值</strong><br> </p>
<pre class="blockcode"><code> @RequestMapping(params="username=tom") </code></pre>
<p><br> <strong>4) 请求数据中指定参数名!=值</strong><br> </p>
<pre class="blockcode"><code> @RequestMap |
|