Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der Konfiguration der Integrationsdateien von Spring, Spring MVC und MyBatis

Detaillierte Erläuterung der Konfiguration der Integrationsdateien von Spring, Spring MVC und MyBatis

巴扎黑
巴扎黑Original
2017-04-30 10:11:391848Durchsuche

Ich habe mehrere kleine Projekte mit dem SSM-Framework durchgeführt und es fühlt sich gut an, dass es an der Zeit ist, dies zusammenzufassen. Fassen wir zunächst die Dateikonfiguration der SSM-Integration zusammen. Tatsächlich ist es am besten, die offizielle Dokumentation für bestimmte Verwendungszwecke zu lesen.

Frühling: http://spring.io/docs

​MyBatis: http://mybatis.github.io/mybatis-3/

Ich werde nicht auf die grundlegende Organisationsstruktur und Verwendung eingehen. Die vorherigen Blogs und offiziellen Dokumente sind sehr umfassend. Jar-Pakete können mit Maven organisiert und verwaltet werden. Schauen wir uns die Konfigurationsdatei an.

Web.xml-Konfiguration

web.xml sollte die wichtigste Konfigurationsdatei des gesamten Projekts sein, aber servlet3.0 unterstützt bereits die Annotationskonfiguration. Vor Servlet3.0 muss jedes Servlet das Servlet und seine Zuordnungsbeziehung in web.xml konfigurieren. Im Spring-Framework ist dies jedoch nicht erforderlich, da Spring eine Abhängigkeitsinjektion ist, die auch als Inversion of Control bezeichnet wird. Sie müssen aber auch ein wichtiges Servlet konfigurieren, nämlich den Front-End-Controller (DispatcherServlet). Die Konfigurationsmethode ähnelt im Wesentlichen einem gewöhnlichen Servlet.

Der Konfigurationsinhalt lautet wie folgt:

<!-- 配置前端控制器 -->
  <servlet>
      <servlet-name>spring</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <!-- ContextconfigLocation配置springmvc加载的配置文件
          适配器、处理映射器等
           -->
          <param-name>contextConfigLocation</param-name>
          <param-value>WEB-INF/classes/spring/springmvc.xml</param-value>
  </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>spring</servlet-name>
      <!-- 1、.action访问以.action结尾的  由DispatcherServlet进行解析
           2、/,所有访问都由DispatcherServlet进行解析
       -->
      <url-pattern>/</url-pattern>
  </servlet-mapping>

Hierbei ist zu beachten, dass springmvc.xml die Spring-Konfigurationsdatei ist, auf die später noch eingegangen wird. Wenn die URL in .action ist, fängt der Front-End-Controller nur Anfragen ab, die mit .action enden, und ignoriert statische Dateien. Die Kontrolle statischer Seiten erfordert andere Mittel. Wenn Sie / als URL verwenden, werden alle Anfragen abgefangen, einschließlich Anfragen für statische Seiten. Auf diese Weise können Sie jede Anfrage abfangen, die Sie verarbeiten möchten, es liegt jedoch ein Problem vor. Wenn alle Anfragen abgefangen werden und im Interceptor keine entsprechende Verarbeitung erfolgt, ist auf alle auf der Seite verwendeten statischen JS-, CSS- und Bilder nicht zugegriffen und die Seite wird nicht normal angezeigt. Dieses Problem kann jedoch durch die Konfiguration statischer Ressourcen gelöst werden. Wird später erwähnt.

Federbehälter konfigurieren:

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/classes/spring/applicationContext-*.xml</param-value>

</context-param>

Unter diesen enthält applicationContext-*.xml drei Konfigurationsdateien, die die spezifischen Konfigurationen des springIoC-Containers darstellen. Wird später erwähnt.

Konfigurieren Sie einen Listener:

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

Die vollständige Konfiguration von web.xml lautet wie folgt:



      
  
  
  
    404
    /error404.jsp
  
  
  
    500
    /error500.jsp
  
  
  
    
        contextConfigLocation
        WEB-INF/classes/spring/applicationContext-*.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    

    
  <!-- 配置前端控制器 -->
  <servlet>
      <servlet-name>spring</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <!-- ContextconfigLocation配置springmvc加载的配置文件
          适配器、处理映射器等
           -->
          <param-name>contextConfigLocation</param-name>
          <param-value>WEB-INF/classes/spring/springmvc.xml</param-value>
  </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>spring</servlet-name>
      <!-- 1、.action访问以.action结尾的  由DispatcherServlet进行解析
           2、/,所有访问都由DispatcherServlet进行解析
       -->
      <url-pattern>/</url-pattern>
  </servlet-mapping>
    
  
  
      CharacterEncodingFilter
      org.springframework.web.filter.CharacterEncodingFilter
      
          encoding
          utf-8
      
  
  
      CharacterEncodingFilter
      /*
  
  
    welcome.jsp
    
    

Beachten Sie, dass die Konfigurationsdatei zwei weitere Inhalte enthält. Eine davon ist die Fehlerseite, die zur benutzerfreundlichen Behandlung von Fehlern verwendet wird. Sie können den Fehlercode zur Unterscheidung verwenden und zur entsprechenden Verarbeitungsseite springen. Dieser Konfigurationscode wird am besten vorne platziert und verarbeitet, bevor der Front-End-Controller ihn abfängt.

Ein weiterer Inhalt ist ein Filter zur Lösung des Post-verstümmelten Problems. Er fängt Post-Anfragen ab und kodiert sie in utf8.

Konfiguration von springmvc.xml                                                                                                                      Resolver-Konfiguration anzeigen:

Beim Festlegen des Ansichtsnamens im Controller werden das Präfix und das Suffix automatisch hinzugefügt.

<!-- 配置视图解析器 -->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <!-- 使用前缀和后缀 -->
         <property name="prefix" value="/"></property>
         <property name="suffix" value=".jsp"></property>
</bean>
Controller-Konfiguration

Der automatische Scanmodus scannt alle Controller unter dem Paket, und Sie können Anmerkungen verwenden, um den Zugriffspfad anzugeben.

Sie können auch eine einzelne Konfigurationsmethode verwenden und müssen den vollständig qualifizierten Namen des Controllers angeben.

<!-- 使用组件扫描的方式可以一次扫描多个Controller -->
<context:component-scan base-package="com.wxisme.ssm.controller">

Konfigurieren Sie den kommentierten Prozessoradapter und den Prozessor-Mapper:

<bean name="/queryUser.action" class="com.wxisme.ssm.controller.Controller1"/>

Sie können auch die folgende vereinfachte Konfiguration verwenden:

<!-- 注解的处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 注解的处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

Konfigurieren Sie den Interceptor. Sie können ihn direkt so definieren, dass er alle Anforderungen abfängt, oder Sie können den Abfangpfad anpassen.

<!-- 配置注解的处理器映射器和处理器适配器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

Konfigurieren Sie den globalen Ausnahmehandler

<mvc:interceptors>
    <!-- 直接定义拦截所有请求 -->
    <bean class="com.wxisme.ssm.interceptor.IdentityInterceptor"></bean>
        <!-- <mvc:interceptor>
            拦截所有路径的请求   包括子路径
            <mvc:mapping path="/**"/>
            <bean class="com.wxisme.ssm.interceptor.IdentityInterceptor"></bean>
        </mvc:interceptor> -->
    </mvc:interceptors>

Konfigurieren Sie den Datei-Upload-Datenparser, der beim Hochladen von Dateien konfiguriert werden muss.

<!-- 定义全局异常处理器 -->
    <!-- 只有一个全局异常处理器起作用 -->
    <bean id="exceptionResolver" class="com.wxisme.ssm.exception.OverallExceptionResolver"></bean>

Sie können auch einige benutzerdefinierte Parametertypen konfigurieren, am Beispiel der Datumstypbindung.

<!--配置上传文件数据解析器  -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize">
            <value>9242880</value>
        </property>
    </bean>

Wie oben erwähnt, werden einige statische Ressourcen ohne spezielle Verarbeitung unbrauchbar, wenn alle Anforderungen beim Konfigurieren des Front-End-Controllers abgefangen werden. Wenn dies der Fall ist, können Sie die folgende Konfiguration verwenden, um auf statische Ressourcendateien zuzugreifen.

<!-- 自定义参数类型绑定 -->
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
     <property name="converters">
         <list>
             <!-- 日期类型绑定 -->
             <bean class="com.wxisme.ssm.controller.converter.DateConverter"/>
         </list>
     </property>
    </bean>

Sie können auch die Standardeinstellung verwenden, diese muss jedoch in web.xml konfiguriert werden.

<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/css/**" location="/css/" />  
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/imgdata/**" location="/imgdata/" />

Sie können dieses Problem vermeiden, indem Sie nicht alle Pfade blockieren.

<!-- 访问静态资源文件 -->
    <!-- <mvc:default-servlet-handler/> 需要在web.xml中配置-->
Die vollständige Konfiguration sieht wahrscheinlich so aus. Sie müssen auf den Namensraum der XML-Datei achten, der manchmal Auswirkungen hat.

ApplicationContext-*.xml-Konfiguration


    
    
     
     
         
         
         
     
     
     
     
     
     
    
    
    <!-- 自定义参数类型绑定 -->
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
     <property name="converters">
         <list>
             <!-- 日期类型绑定 -->
             <bean class="com.wxisme.ssm.controller.converter.DateConverter"/>
         </list>
     </property>
    </bean>
    
    
    <!-- 访问静态资源文件 -->
    <!-- <mvc:default-servlet-handler/> 需要在web.xml中配置-->
    
    
      
    
    
    
    
    <mvc:interceptors>
    <!-- 直接定义拦截所有请求 -->
    <bean class="com.wxisme.ssm.interceptor.IdentityInterceptor"></bean>
        <!-- <mvc:interceptor>
            拦截所有路径的请求   包括子路径
            <mvc:mapping path="/**"/>
            <bean class="com.wxisme.ssm.interceptor.IdentityInterceptor"></bean>
        </mvc:interceptor> -->
    </mvc:interceptors>
    
    <!--配置上传文件数据解析器  -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize">
            <value>9242880</value>
        </property>
    </bean>
    
    <!-- 定义全局异常处理器 -->
    <!-- 只有一个全局异常处理器起作用 -->
    <bean id="exceptionResolver" class="com.wxisme.ssm.exception.OverallExceptionResolver"></bean>
    
 
                                               🎜>

  applicationContext-*.xml包括三个配置文件,分别对应数据层控制、业务逻辑service控制和事务的控制。

  数据访问层的控制,applicationContext-dao.xml的配置:

  配置加载数据连接资源文件的配置,把数据库连接数据抽取到一个properties资源文件中方便管理。

  配置为:

<!-- 加载数据库连接的资源文件 -->
<context:property-placeholder location="/WEB-INF/classes/jdbc.properties"/>

  其中jdbc.properties文件的内容如下:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database
jdbc.username=root
jdbc.password=1234

  配置数据库连接池,这里使用的是dbcp,别忘了添加jar包!

<!-- 配置数据源   dbcp数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

  Spring和MyBatis整合配置,jar包由MyBatis提供。

  配置sqlSessionFactory

<!-- 配置sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 数据库连接池 -->
    <property name="dataSource" ref="dataSource"/>
    <!-- 加载Mybatis全局配置文件 -->
    <property name="configLocation" value="/WEB-INF/classes/mybatis/SqlMapConfig.xml"/>

</bean>

  SqlMapConfig.xml文件是MyBatis的配置文件,后面会提到。

  配置Mapper扫描器,扫描mapper包下的所有mapper文件和类,要求mapper配置文件和类名需要一致。

<!-- 配置mapper扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 扫描包路径,如果需要扫描多个包中间用半角逗号隔开 -->
    <property name="basePackage" value="com.wxisme.ssm.mapper"></property>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

  整个applicationContext-dao.xml配置文件应该是这样的:




<!-- 加载数据库连接的资源文件 -->
<context:property-placeholder location="/WEB-INF/classes/jdbc.properties"/>

<!-- 配置数据源   dbcp数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>



    
    
    
    


<!-- 配置mapper扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 扫描包路径,如果需要扫描多个包中间用半角逗号隔开 -->
    <property name="basePackage" value="com.wxisme.ssm.mapper"></property>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

  业务逻辑控制,applicationContext-service.xml的配置:

  这个文件里暂时只需要定义service的实现类即可。

<!-- 定义service -->
<bean id="userService" class="com.wxisme.ssm.service.impl.UserServiceImpl"/>

  事务控制,applicationContext-transaction.xml的配置

  配置数据源,使用JDBC控制类。

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!-- 配置数据源 -->
    <property name="dataSource" ref="dataSource"/>
</bean>

  配置通知,事务控制。

<!-- 通知 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!-- 传播行为 -->
            <tx:method name="save*" propagation="REQUIRED"/>
            <tx:method name="insert*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
        </tx:attributes>
    </tx:advice>

  配置AOP切面

<!-- 配置aop  -->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.wxisme.ssm.service.impl.*.*(..))"/>
    </aop:config>

  整个事务控制的配置是这样的:



    


<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!-- 配置数据源 -->
    <property name="dataSource" ref="dataSource"/>
</bean>
    
    
    
        
            
            
            
            
            
            
                        
        
    
    
    <!-- 配置aop  -->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.wxisme.ssm.service.impl.*.*(..))"/>
    </aop:config>

  MyBatis的配置                                                                                                                                             

  SqlMapConfig.xml的配置   全局setting配置这里省略,数据库连接池在spring整合文件中已经配置,具体setting配置参考官方文档。

  别名的定义:

<typeAliases>
    <!-- 批量定义别名 ,指定包名,自动扫描包中的类,别名即为类名,首字母大小写无所谓-->
    <package name="com.wxisme.ssm.po"/>
</typeAliases>

  mapper映射文件的配置:

<mappers>
    <!-- 加载映射文件 -->
    <!-- 这里也可以使用class来加载映射文件,前提是:使用mapper代理的方法,遵循规范,
    并且两个文件必须同名且在同一目录
    <mapper class="com.wxisme.mybatis0100.mapper.UserMapper"/>
    基于class加载,可以进行批量加载
    -->
    <!-- 通过扫描包的方式来进行批量加载映射文件 -->
    <package name="com.wxisme.ssm.mapper"/>     
</mappers>

  整个文件的配置应该是这样的:








<typeAliases>
    <!-- 批量定义别名 ,指定包名,自动扫描包中的类,别名即为类名,首字母大小写无所谓-->
    <package name="com.wxisme.ssm.po"/>
</typeAliases>




    
    

  具体mapper文件的配置,在使用mapper代理的方法时,命名空间需要是对应的Mapper类。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.wxisme.ssm.mapper.AlbumMapper" >
  
</mapper>

  以上只是对SSM框架简单使用时的配置文件,如果需要深入使用或者需要理解其内部机理需要参考官方文档和其源代码。

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Konfiguration der Integrationsdateien von Spring, Spring MVC und MyBatis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn