前言:
一、总共有10节,也就是10篇博客来讲述Spring的MVC,几乎涵盖了所有Spring MVC中的内容。
二、我创建的例子是一个球场预订系统,例子我已经测试调试通过,是一个Maven的project,包含一个Parent project:wsheng-spring-base和一个子Module:wsheng-spring-mvc.
三、在Eclipse中直接import maven的project即可,会同时引入上诉两个project的。
四、如果你没有耐心,可以不必往下学习,因为网上有很多例子,但是都是讲的Spring MVC很少的面,而且你可以快速的上手,但如果你想真正了解Spring MVC中的很多细节,就可以慢慢的去看博客(从第一节到第十节),如果有什么问题,欢迎信息告诉我。
五、学习的方法是你可以先将源码导入到eclipse中,然后根据博客上的内容,对照源码,慢慢消化,这是个漫长的过程,但是会帮助你了解很多Spring MVC的细节。
===================================================================================
在 Spring3.X @MVC - (一)重要的配置文件 http://josh-persistence.iteye.com/blog/1873138的基础上,接着讨论Spring MVC的引用。
6) 激活Spring MVC注解扫描
a: <context:component-scan>启动Spring的组件扫描功能
b:<context:component-sacn>扫描带有@Controller,@RequestMapping的Java类或者方法。
注:@RequestMapping分为类级别和方法级别两种。可以在court-servlet.xml中分别注册一个
DefaultAnnotationHandlerMapping和一个AnnotationMethodHanlderAdapter实例。
7)使用注解@Controller创建SpringMVC控制器,使用@RequestMapping进行URL路由。
基于注解的类可以是任意的类,可以不用实现特设的接口或者扩展特殊的父类。使用@Controller注解这种类。@RequestMapping注解可以应用到类级别或者方法级别。第一种映射策略是将一个特殊的URL模式映射到一个控制器类,然后映射特定的HTTP方法到每个处理程序中的方法。
@Controller
@RequestMapping("/welcome")
public class WelcomeController {
@RequestMapping(method = RequestMethod.GET)
public String welcome(Model model) {
Date today = new Date();
model.addAttribute("today",today);
return "welcome";
}
}
上面的代码直观的表现出需要显示在视图View层上的数据today被加到了Model层中。@RequestMapping(method = RequestMethod.GET)注解用于将welcome方法装饰城控制器默认的HTTP GET处理程序的方法。值得注意的是,如果没有声明默认的HTTP GET处理程序方法,会抛出SeveltException异常。因此Spring MVC控制器至少能起到一个URL路由和默认HTTP GET处理程序的方法。
8)@Autowired注解使得不需要使用XML文件注入属性。
<bean class="A">
<property name="b" ref="b"/>
</bean>
9)创建JSP视图
Spring MVC支持许多种用于不同表现技术的视图,这些视图包括:JSPs, HTML, PDF, Excel(XLS),XML,JSON,Atom以及RSS feeds,JasperReports和其他第三方视图实现。
10)用@RequestMapping映射请求:
当DispatcherServlet接收到一个Web请求,它试图将请求发往用@Controller注解声明的不同控制器类。这个调度过程将去扫描用@RequestMapping注解的各个方法。
a: 将多个URL映射到同一个方法上:
@RequestMapping(value={"/member/remove","/member/delete"}, method=RequestMethod.GET)
public String removeMember(@RequestParam("memberName") String memberName){ }
b:映射类,@RequestMapping注解支持使用通配符(*)
@Controller
@RequestMapping("/member/*")
public class MemberController {
@RequestMapping("display/{user}")
public String removeMember(@PathVariable("user") String user) {
...
}
@RequestMapping
public void memberList() {
1. 该方法使用了@RequestMapping注解,但是缺少URL值。因为类级别使用了/member/* URL通配符,这个方法可看成是
全能的方法执行。任何URL请求(例如/member/abcdefg或者/member/randomroute)都会触发该方法。
2. void的返回值,这使处理程序方法默认指向同名的视图,也就是memberList.
}
}
11) 映射8种HTTP类型
默认情况下,@RequestMapping注解假定所有请求都是HTTP GET类型,这在Web应用中是最常见的情况。如果需要指定POST类型,可以使用
@RequestMapping(method=RequestMethod.POST)或者
@RequestMapping(value="processUser" method= RequestMethod.POST)
附:HTTP请求类型一共有8种情况:HEAD, GET,POST,PUT,DELETE,TRACE,OPTIONS,CONNECT.
看了如上的介绍后,你可能会问,URL扩展名.HTML和.JSP在哪里?
你可能注意到,@RequestMapping注解中指定的所有URL都没有文件扩展名如.html或者.jsp的踪影。这是与MVC设计一致的好习惯,但是没有得到广泛地采用。
控制器不应该与任何类型的表现视图技术的扩展名(如HTML或者JSP)关联。这就是控制器返回逻辑视图,而且声明匹配的URL应该没有扩展名的原因。
如今,应用常常要以不同的格式(如XML,JSON,PDF或者XLS(Excel))提供相同的内容。检查请求中提供的扩展名(如果有)以及确定使用的视图技术应该留给视图解析器完成。