使用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配置如下:

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- 配置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>