<servlet> <servlet-name>springMvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
在WEB-INF下添加spring的配置文件spring-mvc.xml 文件内容如下:
<!-- 启动spring自动扫描 --> <context:component-scan base-package="com.morel.tiger.control"/> <!-- 支持spring3.0新的mvc注解 --> <mvc:annotation-driven />
创建UserController如下:
@Controller @RequestMapping("/user.do") public class UserController { @RequestMapping(params="method=add") public String addUser(Model model){ model.addAttribute("message", "添加了一个用户"); System.out.println("UserController.addUser()"); return "/WEB-INF/jsp/addsuc.jsp"; } }
其中@RequestMapping("/user.do")的配置是指:该controller的请求url为:user.do
@RequestMapping(params="method=add"):凡是请求的url为:user.do而带了参数method=add的请求会由方法addUser来处理。
return "/WEB-INF/templates/success.vm"; 是告诉spring完成处理之后直接进入该视图。
可以编写多个处理请求的方法,而这些方法的调用都是通过@RequestMapping的属性类控制调用的。
RequestMapping的设置
在类的上面注解@RequestMapping("/ex.do")意思为所有的ex.do请求全部进入该类处理。
当然可以编写多个处理请求的方法,而这些方法的调用都是通过@RequestMapping的属性类控制调用的。
value:指定请求的实际地址(value可以省略不写)
method:指定请求的method类型,GET、POST、PUT、DELETE等;(也就是说只有制定类型的请求才会进入该方法处理)
consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
value属性:
@Controller @RequestMapping("/user") public class UserController{ @RequestMapping(value="/some.do") public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { System.out.println("handleRequest"); return new ModelAndView("/WEB-INF/jsp/addsuc.jsp"); } }
value:指定请求的实际地址,指定的地址可以是URI Template模式(最终请求的url为:类注解的url+方法注解的url)
value的uri值为以下三类:
A)可以指定为普通的具体值:@RequestMapping(value="/some.do")
该注解的是说:请求的url为”user/some.do”就会进入该方法(handleRequest)处理。
B)可以指定为含有某变量的一类值:@RequestMapping(value="/{userId}/delete.do",method=RequestMethod.GET)
这个注解:url中带了参数的数据userId url:user/1123/delete.do
C)可以指定为含正则表达式的一类值
如:
@RequestMapping(value="/{userBirth:\\d{4}-\\d{2}-\\d{2}}/update.do") public String update(@PathVariable String userBirth){ System.out.println("userBirth:"+userBirth); return "/WEB-INF/jsp/addsuc.jsp"; }
请求的url类似:user/1990-11-11/update.do
使用@PathVariable指定形参接收url中的数据
当类没有@RequestMapping注解时,则直接参考方法的注解匹配对于的url。如:
@Controller public class UserController{ @Controller @RequestMapping("/user.do") public void managerUser(){} }
在这里url为user.do则直接使用managerUser处理请求。