Spring3.X @MVC - (二)So Easy的注解功能

前言:

一、总共有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))提供相同的内容。检查请求中提供的扩展名(如果有)以及确定使用的视图技术应该留给视图解析器完成。

猜你喜欢

转载自josh-persistence.iteye.com/blog/1873733