今年在工作中使用到了spring的mvc,工作的单位从spring1.x开始就使用了其mvc。项目的组合方式都是围绕spring进行的,如spring mvc+hibernate。或者是直接使用spring mvc+jdbc的方式(使用spring 的jdbctemplet)再配合其他如调度框架quartz进行任务调度,第三方缓存ehcache、memecache等进行开发。看到了其简单的高效、开发的迅速。看了公司的多个项目.综合起来想写那么一篇总结。刚好进行年终盘点。呵呵
对应的源码在http://blog.csdn.net/yanghuiyu123/article/details/8513512
1、使用spring mvc的配置(非注解篇,注解篇下面进行)
web.xml中加入context监听
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
加入spring的控制过滤,过滤.do结尾的请求
<servlet>
<servlet-name>framework</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/framework-servlet.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>framework</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
在对应的framework-servlet.xml中加入处理映射的配置即xxx.do映射到哪个controller进行处理:
<bean id="defaultHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
同时也可以加入其它的一些配置如上传文件的支持
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为10MB -->
<property name="maxUploadSize">
<value>10485760</value>
</property>
</bean>
又或者是其它如国际化的支持
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename"><value>messages</value></property>
</bean>
到这里就可以简单的使用springmvc了.
只需要在配置文件中配置你的请求如<bean id="/jsp/user/loginController.do" class="com.xxx.UserLoginController"></bean>
当然,这里所写的类必须实现controller接口,或者继承MultiActionController基类.通常在项目中使用的是继承MultiActionController。如果想要更加的灵活那么可以继承实现AbstractController类。由于在一个处理类中会有各种操作方法,增删改查等,但是又不可能为每个方法创建一个类。所以为们引入一个方法解析器,用来解析控制类中的方法名称,这样为们就可以在需要save表单的时候只需要在/jsp/user/loginController.do后面加上一个method=save就可以调用UserLoginController中的save方法类。
<bean id="methodResover" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver" >
<property name="paramName" value="method" />
</bean>
完整的bean为
<bean name="/jsp/user/loginController.do" class="com.xxx.UserLoginController">
<property name="methodNameResolver" ref="methodResover" />
</bean>
spring还提供了其他两种methodNameResolver:InternalPathMethodNameResolver和PropertiesMethodNameResolver但是这两种解析方法配置过于复杂。
如PropertiesMethodNameResolver需要在PropertiesMethodNameResolver配置中加入urlMapping的配置用来映射actionName。InternalPathMethodNameResolver则直接可以通过url来确定应该访问哪个方法,
如/jsp/user/save.do则访问save方法./jsp/user/xxxx.do则访问xxxx方法.
在MultiActionController中,spring提供了bind来绑定表单数据bind(request,command).
下面说说注解的使用.web.xml配置一样.只是在framework.xml中的配置不一样了。简单了很多.
加入<context:component-scan base-package="com.xxxx.xxx"/>需要扫描的路径,最好dao、service、controller分开写.
<mvc:annotation-driven />加入注解驱动器
spring 3.1之前使用
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> </bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> </bean>
注解请求映射器,用来处理@RequestMapping映射的路径及资源分配。
spring 3.1之后使用RequestMappingHandlerMapping和RequestMappingHandlerAdapter。<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
加入资源解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value="*" />
</bean>
随后即可用@Controller @Service @RequestMapping @Repository @Component @Resource @Autowire @scope等注解进行开发
虽然所有的组件不管是dao还是service都可以用@Component 来注册。但是为了更加清晰的表达我们的程序结构。我们用@Repository注解数据访问层用@serivice注解服务层,用@Controller注解控制层.将其他一些组件用@Component 注解。在实现过程中用@Resource 进行资源的注入。也可用spring自己的@Autowire 进行注解不过Autowire 是type注解。其只是匹配类型。@resource则是先匹配name,如果没有name再匹配类型。不过Autowire也可配合@Qualifier("beanName")来进行name匹配。@ResponseBody用来讲方法中返回的信息进行相应的格式化。如将返回的list转换为格式的数据
jackson-core-asl-1.7.2.jar
jackson-mapper-asl-1.7.2.jar
需要以上两个包.同时在方法上加入@ResponseBody即可。
@scope设定bean的作用域如@scope(value="singleton")单例
至此spring的mvc开发已经可以进行。用spring的mvc开发是很简单的。如果再加上spring的jdbcTemplet等数据库模板整个程序就不再需要orm的介入了。
ps:这篇文章只是在总结.没有结合其他部分的东西进行一个系统的讲解.在其他文章中会有系统的介绍.