在博文《SpringMVC一路总结(一)》和《SpringMVC一路总结(二)》中,该框架的应用案例都是是基于xml的形式实现的。然而,对于大型项目而言,这种xml的配置会增长项目模块之间的耦合性,增长配置文件的配置难度,所以,从效率上来说,这是一种并不被看好的方式。html
尽管这种xml形式的配置在项目中用的比较少,可是,这种形式的配置能够很清楚的了解到SpringMVC 入门的一些基础知识,学起来能够感受到很轻松。只有在了解了这种基于xml的实现SpringMVC 以后,咱们再来看注解实现就会显得更加轻松。正是由于配置很麻烦,增长程序中模块间的耦合度,因此,今天的主要任务就是利用注解的形式实现一个很简单的SpringMVC,这样一来,入门注解样例,了解SpringMVC的基础注解形式,待实现案例以后,就会很明显感受到SpringMVC相比较XML形式而言,更加方便,更加贴合实际应用。web
对于SpringMVC中的注解关键字不是本文的重点,咱们在用的过程当中会总结一些,不断的应用,不断的总结。若是想要一次性的了解SpringMVC中的注解关键字,能够查看相关API。本博文为本人学习的总结,请尊重劳动成果。欢迎转载,请保留博文出处:http://www.cnblogs.com/itred ;本人邮箱: it_red@sina.com 。spring
新建一个web工程,加入相关JAR包;浏览器
在web.xml中进行相关配置,本例的SpingMVC-servlet.xml配置文件放在了src目录下,所以须要在web.xml中进行相关的配置。配置以下:mvc
<servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:SpringMVC-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
而后就像最开始学习xml配置SpringMVC同样,新建SpringMVC-servlet.xml;由于从如今开始就要学会用注解的形式来应用SpringMVC,因此牢记几个类。在spring的包中,有一个webmvc的JAR包,其下有一个注解方式处理适配器类org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter和一个默认的的注解处理映射类org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping。 这两个类是必需要知道的,由于这两个类的加载,或者说在SpringMVC-servlet.xml文件中的两个bean,就是因为他们,才会开启Spring的注解,一个是根据包找类,一个是根据类去找方法。虽说,在启用注解时能够经过一行代码<mvc:annotation-driven/>替代,可是我仍是建议须要知道这两个基本类。app
还有一个须要注意的地方就是控制器所属的包,由于这里再也不是一个一个的去用xml进行配置,因此须要进行扫描控制器,在SpingMVC-servlet.xml中的扫描语句是:<context:component-scan base-package="com.red.controller" /> 。到这里,配置基本完成,对!你没看错,之前利用xml进行配置时所须要的配置比如今这个可多了不少。即便后面新建控制器时,也不须要再进行配置了。框架
说到控制器,固然不可少!在制定包下新建一个控制器,由于这个包必须在使用注解能够扫描的包目录下才能够。学习
源码以下:url
package com.red.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; @Controller public class AnnoController { @RequestMapping(value = "/user/adduser", method = RequestMethod.GET) public ModelAndView addUser() { System.out.println("add user"); String result = "addUser"; return new ModelAndView("/index", "result", result); } @RequestMapping(value = "/user/deluser", method = RequestMethod.GET) public ModelAndView delUser() { System.out.println("del user"); String result = "del user"; return new ModelAndView("/index", "result", result); } }
下面对上面控制器中所用到的注解进行总结:spa
@Controller 标识在类名之上,说明该类就是一个控制器;其实之后在用的过程当中,只要是控制器就加上,并且当程序中的内容比较多时,也不会出错;
@RequestMapping(value = "/user/adduser", method = RequestMethod.GET) 方法的映射,value中的值就是浏览器能够访问的URL,而对于method是指的是请求方法,一旦在这里指定了该方法的请求方式,那么其它的就不可用,所以,它是严格的区分POST和GET方法;固然在某种状况下,须要同时知足POST和GET方法,这里就直接省略method的设置,直接忽略掉这部分;同时也能够将value = "/user/adduser"这部分的值直接修改成:"/user/adduser"。只在括号中写入访问的路径就行,一样能够实现同样的功能。
在这里,会看到,每一个方法都得去写一遍@RequestMapping(),可是每一个里面都有相同的一部分,所以能够将相同部分的路径抽取出来,这样一来能够很清楚的看到这个模块到底是什么,在类名的前面@Controller后加上@RequestMapping(“模块名称”),所以,对于团队开发而言,能够很清楚的对每一个部分进行分配。
实现效果以下:(这里是用的GET方式,POST方式请自测)
方法一:
方法二:
控制台输出:
对于技术的学习,仍是得就其自己。不能知道简单的应用就好了,这样始终都不会理解人这样设计的原因。光浮夸于其表面,不能沉下心来,静静体会其高明之处,就必然不能真正学会这门技术。
案例下载连接
感谢奋斗中的本身!
邮箱:it_red@sina.com
我的博客: http://itred.cnblogs.com