1、tomcat启动后,进入web.xml配置文件,执行spring监听
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
2、然后会找到Spring的配置文件配置如下:
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext.xml </param-value> </context-param>
在启动Web容器时,自动装配Spring 的applicationContext.xml的配置信息。(先执行spring的监听器,因为它实现了ServletContextListener这个接口,在web.xml 配置这个监听器,启动容器时,就会默认执行它实现的方法。ContextLoaderListener 中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成spring在web下的入口在配置文件web.xml的监听器中)
3、SpringMVC的核心是DispatcherServlet
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
这种情况下,拦截器会自动拦截,默认的SpringMVC配置文件是\webapp\WEB-INF\dispatcher-servlet.xml
4、dispatcher-servlet.xml通过扫包的形式进行找到对应的映射方法
<context:component-scan base-package="com.mmall" annotation-config="true"/>在对应的类上面如下
@Controller @RequestMapping(value = "/manage/user") public class Controller { @Autowired private IUserService iUserService; @RequestMapping(value = "login.do", method = RequestMethod.POST) @ResponseBody public ServerResponse<User> login() {}
这样就进行了任务的控制分发
5、其中@Autowired private IUserService iUserService;这个的意思就是Spring的ioc了,通过注解把IUserService 这个类注入到Controller这个类里面,当然在applicationContext.xml中也配置了Spring的扫包如下:<context:component-scan base-package="com.mall" annotation-config="true"/>6.在spring的配置文件中配置数据库
这个是配置数据源,此处配置的是dbcp连接池,连接池里面是数据库及连接池的信息,配置如下:
<!-- 加载配置文件 --><context:property-placeholder location="classpath:datasource.properties"/><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${db.driverClassName}"/> <property name="url" value="${db.url}"/> <property name="username" value="${db.username}"/> <property name="password" value="${db.password}"/> <!-- 连接池启动时的初始值 --> <property name="initialSize" value="${db.initialSize}"/> <!-- 连接池的最大值 --> <property name="maxActive" value="${db.maxActive}"/> <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 --> <property name="maxIdle" value="${db.maxIdle}"/> <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 --> <property name="minIdle" value="${db.minIdle}"/> <!-- 最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制 --> <property name="maxWait" value="${db.maxWait}"/> <!--#给出一条简单的sql语句进行验证 --> <!--<property name="validationQuery" value="select getdate()" />--> <property name="defaultAutoCommit" value="${db.defaultAutoCommit}"/> <!-- 回收被遗弃的(一般是忘了释放的)数据库连接到连接池中 --> <!--<property name="removeAbandoned" value="true" />--> <!-- 数据库连接过多长时间不用将被视为被遗弃而收回连接池中 --> <!--<property name="removeAbandonedTimeout" value="120" />--> <!-- #连接的超时时间,默认为半小时。 --> <property name="minEvictableIdleTimeMillis" value="${db.minEvictableIdleTimeMillis}"/> <!--# 失效检查线程运行时间间隔,要小于MySQL默认--> <property name="timeBetweenEvictionRunsMillis" value="40000"/> <!--# 检查连接是否有效--> <property name="testWhileIdle" value="true"/> <!--# 检查连接有效性的SQL语句--> <property name="validationQuery" value="SELECT 1 FROM dual"/> </bean>