使用idea工具開發,用maven進行管理。
最近在寫畢業設計,因為對ssm框架一直半解,常常導致出來問題不知道去哪里找,或者讀懂了bug卻解決不了問題的尷尬局面。今天就重新去理解一下ssm的配置文件,以及之間的相互作用。
先說一下有幾個配置文件。
resources--applicationContext.xml : spring容器的配置文件,實現框架整合
--db.properties : 數據庫常量配置(無難度)
--log4j.properties :日志信息的存放(開發時為debug,上線改為info)
--springmvc.xml :springMVC的配置文件。
-- sqlMapConfig.xml :mybats的配置文件,整合后 幾乎只剩下 《別名》
WEBINF -- web.xml :讓配置文件隨着項目的啟動而加載
1. applicationContext.xml 配置文件說明
①添加約束條件
②開啟注解掃描(除了控制器,其他都掃描)
掃描方式有兩種:
<context:annotation-config>
:注解掃描是針對已經在Spring容器里注冊過的Bean
<context:component-scan>
:不僅具備<context:annotation-config>
的所有功能,還可以在指定的package下面掃描對應的bean
用法:
<!--自動掃描包--> <context:component-scan base-package="cn.hfbin.crud"> <!--除了描控制器不掃描外 其它全部掃描--> <context:exclude-filter type="annotation"expression="org.springframework.stereotype.Controller"/> </context:component-scan>
③加載jdbc.properties文件,並且配置數據源
<context:property-placeholder location="classpath:jdbc.properties" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
④配置sqlSessionFactory (Spring和Mybatis整合)
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 指定mybatis配置文件的位置 -->
<property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
</bean>
⑤事務控制的配置
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--控制住數據源 --> <property name="dataSource" ref="DataSource"></property> </bean>
<!--開啟基於注解的事務,使用xml配置形式的事務(必要主要的都是使用配置式) -->
<aop:config> <!-- 切入點表達式 --> <aop:pointcut expression="execution(* cn.hfbin.crud.service..*(..))" id="txPoint"/> <!-- 配置事務增強 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/> </aop:config> <!--配置事務增強,事務如何切入 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 所有方法都是事務方法 --> <tx:method name="*"/> <!--以get開始的所有方法 --> <tx:method name="get*" read-only="true"/> </tx:attributes> </tx:advice>
2. springmvc.xml 配置文件說明
① 掃描controller
<!-- SpringMVC 的配置文件 ,包含網站跳轉的邏輯控制器 --> <context:component-scan base-package="cn.hfbin" use-default-filters="false"> <!-- 只掃描控制器 --> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
② 注解驅動
<!-- 能支持springmvc更高級的一些功能:JSR303校驗 ,快捷的ajax ,映射動態請求--> <mvc:annotation-driven/>
③視圖解析器<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"></property>
<property name="suffix" value=".jsp"></property> </bean>
3. sqlMapConfig.xml 配置
① 別名設置(2種方法) (掃描的是pojo的類)
單個配置:<typeAliases>
<typeAlias type="cn.edu.hpu.ssm.po.User" alias="user"/>
</typeAliases>
批量設置(推薦)
<typeAliases>
<package name="cn.edu.hpu.ssm.po"/>
</typeAliases>
②掃描mapper
<mappers>
<mapper resource="sqlmap/User.xml"/>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
這里要注意的是:mapper也可以在applicationContext中掃描。
在applicationContext配置如下:
<!-- 配置SqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 加載mybatis的配置文件--> <property name="configLocation" value="classpath:config/mybatis/SqlMapConfig.xml"/> <!-- 數據源--> <property name="dataSource" ref="dataSource"/> <!-- mapper.xml掃描--> <property name="mapperLocations" value="classpath:config/mapper/*.xml"/> </bean> <!-- mapper掃描器--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <property name="basePackage" value="com.youye.mapper"/> </bean>
在配置sqlSessionFactory時,配置mapperLocations屬性,用來加載mapper.xml文件,mapper掃描器配置則如上所示。
mapper掃描器中的兩個property的順序不能交換,即SQLSessionFactoryBeanName必須在前。
4. web.xml 配置
這個比較簡單,基本上大家的推薦都是一樣的。
<!-- 啟動spring容器 --> <!-- needed for ContextLoaderListener --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- Bootstraps the root web application context before servlet initialization --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 啟動springmvc的前端控制器 ,攔截所有請求 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- Map all requests to the DispatcherServlet for handling --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<!-- 編碼過濾器 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> <param-name>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/</url-pattern> </filter-mapping> <!-- 使用Rest風格的URL --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/</url-pattern> </filter-mapping></web-app> 注意(這里加入了支持Rest風格的URL 的配置): <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/</url-pattern> </filter-mapping>