1、配置文件
扫描包相关
<context:component-scan base-package="com.xxx,com.yyy"/>
- 可以用逗号隔开扫描多个包;
- 如果像扫描本包下所有的service子包(这些service子包有不同的父包),可以如下配置:
<context:component-scan base-package="com.a.**.service"/>
context:component-scan
默认开启了<context:annotation-config/>
,所以不用再手动设置了;context:component-scan
开启后会扫描base-package
包及其子包,如果扫描到有@Component、@Controller、@Service等注解的类,则把这些类注册为bean;
2、Spring加载properties配置文件
不管是spring.xml、spring-mvc.xml还是spring-mybatis.xml,如果要加载properties配置文件,都要添加下面这写配置:
<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<!-- 可以自行修改 -->
<value>classpath:*.properties</value>
</list>
</property>
</bean>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="properties" ref="properties"/>
</bean>
3、SpringMVC配置文件相关
<mvc:annotation-driven />
,设置此配置后,Spring就知道了我们启用注解驱动,然后iSpring会根据<context:component-scan/>
配置将被扫描到的符合条件的组件注册到工厂中来处理我们的请求;- 如果在web.xml中配置的SpringMVC如下:
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
上面的配置会导致所有的请求都交给SpringMVC处理,包括静态文件,则在SpringMVC的配置文件中必须设置<mvc:annotation-driven />
,否则DispatcherServlet会无法分清请求是静态资源还是MVC的注解从而导致 controller报404错误;
<mvc:default-servlet-handler/>
,开启此配置后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理;
4、SpringMVC整合json
导入需要的json包后,在SpringMVC配置文件中添加如下配置:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="jsonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
5、在SpringMVC配置文件中开启拦截配置
<!--
如果有多个拦截器满足拦截处理的要求,则依据配置的先后顺序来执行
-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有的请求,这个必须写在前面,也就是写在【不拦截】的上面 -->
<mvc:mapping path="/**" />
<!-- 但是排除下面这些,也就是不拦截请求 -->
<mvc:exclude-mapping path="/login.html" />
<mvc:exclude-mapping path="/account/login.do" />
<mvc:exclude-mapping path="/account/regist.do" />
<!-- 自定义的拦截器 -->
<bean class="com.msym.cloudnote.interceptors.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
自定义拦截器要实现HandlerInterceptor 接口,重写preHandle、postHandle和afterCompletion方法,preHandle在业务处理器处理请求之前被调用如果preHandle返回false,则请求不再往下处理、postHandle在业务处理器处理请求执行完成后,生成视图之前执行、afterCompletion在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 ,afterCompletion()执行完成后开始渲染页面。
6、spring-mybatis.xml配置步骤
①、如需要开启事务,则添加如下配置:
<!--开启事务-->
<tx:annotation-driven/>
②、如需要加载配置文件,则可参考品上述问题2;
③、配置数据源的bean,设置id为dataSource;
④、Spring与Mybatis整合,引入数据源,并配置扫描XXXMapper.xml文件,参考下面例子:
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations">
<array>
<value>classpath:mapping/*.xml</value>
</array>
</property>
<!-- 如果有分页插件可以在此处进行配置 -->
</bean>
⑤、扫描DAO接口,并将sqlSessionFactory引入,如下示例:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.a.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
⑥、开启事务,并添加dataSource,如下示例:
<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
7、web.xml配置解析
①、欢迎界面
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
②、配置Spring配置文件路径
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/spring/spring.xml</param-value>
</context-param>
③、添加ContextLoaderListener配置
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
上述配置简单来说就是自动装配spring.xml的配置信息,初始化IOC;
④、配置SpringMVC 核心控制器 DispatcherServlet
示例:
<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*:META-INF/spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 拦截设置 -->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
有关web.xml配置的详细信息参考:
ssm框架中,项目启动过程以及web.xml配置详解