对于各种注解而言,经常见到的当然是“@Controller”,表明某类是一个controller。
如果“@RequestMapping”请求路径映射标注在某个controller类的类级别上,表明访问此类路径下的方法都要加上其配置的路径;
最常见是标注在方法上,表明哪个具体的方法来接受处理某次请求。
@RequestMapping关联url
@Controller
@RequestMapping(value="/book")
public class BookController {
@RequestMapping(value="/title")
public String getTitle(){
return "title";
}
@RequestMapping(value="/content")
public String getContent(){
return "content";
}
}
由于BookController类上加了value=“/book”的“@RequestMapping”的注解,所有相关路径都要加上“/book”,即请求的url分别为:
1. http://localhost:8080/book/titile
2. http://localhost:8080/book/content
"@RequestMapping"的value值前后是否有“/”对请求的路径没有影响,即value="book" 、"/book"、"/book/"其效果是一样的(验证!)
说到controller,不得不说一下spring的配置文件,如下:
<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.lei.demo.controller" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/user/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
第一种,返回类型为String,Controller中的方法如下
@RequestMapping(value="welcome",method=RequestMethod.GET)
public String printMessage(ModelMap model) {
model.addAttribute("message", "返回类型String");
return "users";
}
根据spring配置文件和以上controller,访问“/welcome”时,对应的返回页面为“/WEB-INF/user/users.jsp”
第二种,返回类型为ModelAndView,Controller中的方法如下
@RequestMapping("/welcome")
public ModelAndView printMessage (){
ModelAndView mv = new ModelAndView();
mv.addObject("message", "返回类型ModelAndView ");
mv.setViewName("users");
return mv;
}
两种方法返回的页面相同,不同的是第二种方法将model和view整合成ModelAndView实例,方法中不需要再加入model参数。
“@RequestMapping”的属性
@RequestMapping有如下几个属性:value、method、params、headers
1.@RequestMapping中的value属性
通过value属性,表达主要映射,在Servlet环境中,映射路径(如,/myPath.do),也支持Ant风格的(如,/myPath/*.do)。在方法级别中的相对路径需要类级别的主路径支持。
@RequestMapping("/user")等同于@RequestMapping(value="/user")
2.@RequestMapping中的method属性
通过HTTP请求的method来缩小主映射的范围。GET, POST, PUT, DELETE等,支持定义在类级别或方法级别。
@RequestMapping(value="/user",method={RequestMethod.GET,RequestMethod.POST})
3.@RequestMapping中的params属性
格式为“paramname=paramvalue” 或 “paramname!=paramvalue”。不带参数则表示paramvalue可以为任意值。
例如,params={"param1=1","param2!=2","param3"},表示对应的url必须包括param1、param2、param3三个参数,其中param1的值必须为1,param2的值不能为2,param3的值
可以为任意值。
例如:@RequestMapping(params="action=del"),请求参数包含“action=del”,如:http://localhost:8080/book?action=del
4.@RequestMapping中的headers属性
headers用来限定对应的reqeust请求的headers中必须包括的内容,
例如:headers={"Connection=keep-alive"}, 表示请求头中的connection的值必须为keep-alive。
或@RequestMapping(value="/header/id", headers="Accept=application/json")
表示请求的URL必须为“/header/id且请求头中必须有“Accept =application/json”参数即可匹配。