>  기사  >  Java  >  Spring, Spring MVC, MyBatis 통합 파일 구성에 대한 자세한 설명

Spring, Spring MVC, MyBatis 통합 파일 구성에 대한 자세한 설명

巴扎黑
巴扎黑원래의
2017-04-30 10:11:391848검색

SSM 프레임워크를 사용하여 여러 개의 작은 프로젝트를 진행했는데, 이제 정리할 때가 된 것 같아 기분이 좋습니다. 먼저 SSM 통합의 파일 구성을 요약해 보겠습니다. 실제로 특정 사용법에 대해서는 공식 문서를 읽는 것이 가장 좋습니다.

봄: http://spring.io/docs

​마이바티스: http://mybatis.github.io/mybatis-3/

기본적인 조직 구조와 사용법에 대해서는 다루지 않겠습니다. 이전 블로그와 공식 문서는 매우 포괄적입니다. Jar 패키지는 Maven을 사용하여 구성하고 관리할 수 있습니다. 구성 파일을 살펴보겠습니다.

Web.xml 구성

web.xml은 전체 프로젝트에서 가장 중요한 구성 파일이어야 하지만 servlet3.0은 이미 주석 구성을 지원합니다. servlet3.0 이전에는 각 서블릿이 web.xml에서 서블릿과 해당 매핑 관계를 구성해야 했습니다. 그러나 Spring 프레임워크에서는 이것이 필요하지 않습니다. 왜냐하면 Spring은 제어 반전이라고도 불리는 종속성 주입이기 때문입니다. 그러나 프런트 엔드 컨트롤러(DispatcherServlet)인 중요한 서블릿도 구성해야 합니다. 구성 방법은 기본적으로 일반 서블릿과 유사합니다.

구성 내용은 다음과 같습니다.

<!-- 配置前端控制器 -->
  <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>

여기서는 springmvc.xml이 나중에 설명할 스프링 구성 파일이라는 점에 유의해야 합니다. 의 URL이 .action인 경우 프런트엔드 컨트롤러는 .action으로 끝나는 요청만 가로채고 정적 파일을 무시합니다. 정적 페이지를 제어하려면 다른 수단이 필요합니다. /를 URL로 사용하면 정적 페이지에 대한 요청을 포함한 모든 요청이 차단됩니다. 이렇게 하면 처리하려는 요청을 가로챌 수 있지만 문제가 있습니다. 모든 요청을 차단하고 해당 인터셉터에서 해당 처리가 이루어지지 않으면 해당 페이지에 사용된 모든 정적 js, css, 이미지에 접근할 수 없게 되어 해당 페이지가 정상적으로 표시되지 않습니다. 하지만 이 문제는 정적 리소스 구성을 통해 해결할 수 있습니다. 나중에 언급하겠습니다.

스프링 컨테이너 구성:

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

</context-param>

그 중 applicationContext-*.xml에는 springIoC 컨테이너의 특정 구성인 3개의 구성 파일이 포함되어 있습니다. 나중에 언급하겠습니다.

리스너 구성:

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

web.xml의 전체 구성은 다음과 같습니다.



      
  
  
  
    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
    
    

구성 파일에는 두 가지 콘텐츠가 더 있습니다. 하나는 오류를 친숙하게 처리하는 데 사용되는 오류 코드를 사용하여 해당 처리 페이지로 이동할 수 있습니다. 이 구성 코드는 전면에 배치하는 것이 가장 좋으며 프런트엔드 컨트롤러가 이를 가로채기 전에 처리됩니다.

또 다른 콘텐츠는 게시물 요청을 가로채서 utf8로 인코딩하여 게시물 왜곡 문제를 해결하는 필터입니다.

springmvc.xml 구성                                                                                          확인자 구성 보기:

<!-- 配置视图解析器 -->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <!-- 使用前缀和后缀 -->
         <property name="prefix" value="/"></property>
         <property name="suffix" value=".jsp"></property>
</bean>
Controller에서 뷰 이름을 설정하면 접두사와 접미사가 자동으로 추가됩니다.

컨트롤러 구성

자동 스캔 모드는 패키지 아래의 모든 컨트롤러를 스캔하며 주석을 사용하여 액세스 경로를 지정할 수 있습니다.

아아아아

단일 구성 방법을 사용할 수도 있으며 컨트롤러의 정규화된 이름을 지정해야 합니다.

아아아아

주석이 달린 프로세서 어댑터 및 프로세서 매퍼 구성:

<!-- 使用组件扫描的方式可以一次扫描多个Controller -->
<context:component-scan base-package="com.wxisme.ssm.controller">
다음과 같은 단순화된 구성을 사용할 수도 있습니다.

<bean name="/queryUser.action" class="com.wxisme.ssm.controller.Controller1"/>
인터셉터를 구성하고 모든 요청을 인터셉트하도록 직접 정의하거나 인터셉터 경로를 사용자 정의할 수 있습니다.

아아아아

전역 예외 처리기 구성

<!-- 注解的处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 注解的处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
파일 업로드 시 구성해야 하는 파일 업로드 데이터 파서를 구성합니다.

아아아아

날짜 유형 바인딩을 예로 들어 일부 사용자 정의 매개변수 유형을 구성할 수도 있습니다.

아아아아

위에서 언급한 것처럼 프런트엔드 컨트롤러를 구성할 때 모든 요청을 가로채면 일부 정적 리소스는 특별한 처리 없이 사용할 수 없게 됩니다. 이 경우 다음 구성을 사용하여 정적 리소스 파일에 액세스할 수 있습니다.

아아아아

기본값을 사용할 수도 있지만 web.xml에서 구성해야 합니다.

아아아아

모든 경로를 차단하지 않으면 이 문제를 피할 수 있습니다.

전체 구성은 아마도 다음과 같을 것입니다. 때때로 영향을 미치는 xml 파일의 네임스페이스에 주의를 기울여야 합니다.

아아아아

ApplicationContext-*.xml 구성

                                         🎜>

  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框架简单使用时的配置文件,如果需要深入使用或者需要理解其内部机理需要参考官方文档和其源代码。

위 내용은 Spring, Spring MVC, MyBatis 통합 파일 구성에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.