快速搭建SSM框架


源碼
百度網盤鏈接:https://pan.baidu.com/s/1-cYNguY5AqIeoUljbhxacA
提取碼:hkw5

1. 創建項目

第一步:
在這裏插入圖片描述
第二步:
在這裏插入圖片描述
第三步:
在這裏插入圖片描述
第四步:
在這裏插入圖片描述
第五步:
在這裏插入圖片描述
第六步:
在main下創建兩個目錄一個java,一個resources
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
最終兩個目錄顯示爲下面:
在這裏插入圖片描述

2. 架構搭建

2.1 pom.xml

pom.xml文件中引入依賴

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <!-- spring版本號 -->
    <spring.version>4.3.19.RELEASE</spring.version>
    <log4j.version>2.11.1</log4j.version>
  </properties>

  <dependencies>
    <!--spring相關依賴start-->

    <!--spring核心-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!-- Spring DAO層 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--Spring web-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--spring相關依賴end-->

    <!-- 數據庫start -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>6.0.6</version>
    </dependency>
    <!-- 數據庫 end-->

    <!--連接池start-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.11</version>
    </dependency>
    <!--連接池end-->

    <!--mybatis start-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.2</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.8.13</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.13</version>
    </dependency>

    <!--mybatis end-->

    <!--hibernate驗證器-->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>5.4.2.Final</version>
    </dependency>

    <!--fastjson-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.1.40</version>
    </dependency>

    <!--log4j-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>${log4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>${log4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>${log4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-web</artifactId>
      <version>${log4j.version}</version>
    </dependency>

    <!--文件上傳-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
    </dependency>

    <!--分頁-->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.0.4</version>
    </dependency>
  </dependencies>

2.2 log4j2.xml

在resources下創建log4j2.xml日誌文件

<?xml version="1.0" encoding="UTF-8"?>

<Configuration status="off" monitorInterval="60">

    <properties>
        <property name="LOG_HOME">C:\Comvee\log4j2-log</property>
        <property name="consolePattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] %class{36} (%M:%L) - %msg%n</property>
        <property name="errorPattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] %class{36} (%M:%L) %X{requestInfo} - %msg%n</property>

    </properties>

    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="${consolePattern}" />
        </Console>

        <RollingRandomAccessFile name="info"
                                 fileName="${LOG_HOME}/info.log"
                                 filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="${consolePattern}" />
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="20MB" />
            </Policies>
            <DefaultRolloverStrategy max="20"/>
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="warn"
                                 fileName="${LOG_HOME}/warn.log"
                                 filePattern="${LOG_HOME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="${errorPattern}" />
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="20MB" />
            </Policies>
            <DefaultRolloverStrategy max="20"/>
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="error"
                                 fileName="${LOG_HOME}/error.log"
                                 filePattern="${LOG_HOME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="${errorPattern}" />
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="20MB" />
            </Policies>
            <DefaultRolloverStrategy max="20"/>
        </RollingRandomAccessFile>

    </Appenders>
</Configuration>

2.3 db.properties

在resources下創建db.properties

driverClassName=com.mysql.jdbc.Driver
validationQuery=SELECT 1
jdbc_url=jdbc\:mysql\://127.0.0.1\:3306/demo?serverTimezone\=UTC&useUnicode\=true&characterEncoding\=UTF-8
jdbc_username=root
jdbc_password=root

2.4 mybatis-config.xml

在resources下創建mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
       <!--<settings>-->
        <!--可以打印sql-->
            <!--<setting name="logImpl" value="STDOUT_LOGGING" />-->
        <!--</settings>-->
    <settings>
        <setting name="logImpl" value="LOG4J2" />
    </settings>
</configuration>

2.5 applicationContext.xml

在resources下創建applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:cache="http://www.springframework.org/schema/cache"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/cache
       http://www.springframework.org/schema/cache/spring-cache-4.2.xsd
       http://www.springframework.org/schema/task
       http://www.springframework.org/schema/task/spring-task-4.1.xsd
    ">


<!--    此標籤用來掃描包以及包下面的類,被掃描到的類就可以使用註解,如@Service等,同時被掃描到後就會被放入IOC容器中,
    之所以不掃描Controller,就是因爲Controller是要交給SpringMVC掃描的-->
    <context:component-scan base-package="com.laowang" >
        <!--不掃描Controller包-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--這裏引入之前創建的jdbc配置文件,這樣可以很靈活的改變配置,而不需要修改xml文件-->
<!--    ignore-unresolvable:是否忽略解析不到的屬性,如果不忽略,找不到將拋出異常。但它設置爲true的主要原因是:
    配置文件${}找不到對應占位符的值 不會報錯,會直接賦值'${}';如果設爲false,會直接報錯-->
    <context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true"/>


    <!-- 阿里 druid數據庫連接池 -->
    <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!--配置連接池屬性-->
        <property name="driverClassName" value="${driverClassName}" />
        <property name="url" value="${jdbc_url}" />
        <property name="username" value="${jdbc_username}" />
        <property name="password" value="${jdbc_password}" />
        <property name="initialSize" value="10" />
        <property name="maxActive" value="100" />
        <property name="minIdle" value="10" />
        <property name="maxWait" value="60000" />
        <property name="validationQuery" value="${validationQuery}" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
        <property name="testWhileIdle" value="true" />
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <property name="minEvictableIdleTimeMillis" value="25200000" />
        <property name="removeAbandoned" value="true" />
        <property name="removeAbandonedTimeout" value="1800" />
        <property name="logAbandoned" value="true" />
        <property name="filters" value="mergeStat" />
        <property name="connectionProperties" value="druid.stat.slowSqlMillis=5000" />
    </bean>



    <!-- mybatis配置-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入數據庫連接池-->
        <property name="dataSource" ref="dataSource"/>
        <!-- 配置 MyBaties 全局配置⽂件:mybatis-config.xml -->
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <!-- 掃描 sql 配置⽂件:mapper 需要的 xml ⽂件 -->
        <property name="mapperLocations">
            <array>
                <value>classpath:mapper/**/*.xml</value>
            </array>
        </property>
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <value>
                            helperDialect=mysql
                            params=count=countSql
                            autoRuntimeDialect=true
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>


    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
        <constructor-arg name="executorType" value="BATCH"/>
    </bean>


    <!-- 配置掃描 dao 接⼝包, 動態實現 dao 接⼝, 注⼊到 Spring 容器中 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 給出需要掃描 dao 接⼝包 -->
        <property name="basePackage" value="com.laowang.**.mapper"/>
        <!-- 注⼊ sqlSessionFactory -->
        <!--<property name = "sqlSessionFactoryBeanName"  value = "sqlSessionFactory"/>-->
    </bean>

    <!-- 事務配置-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--控制數據源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--開啓基於註解的事務配置-->
    <aop:config>
        <aop:pointcut id="txPoint" expression="execution(* com.laowang.*.service..*Service*.*(..))"/>
        <!--配置事務增強-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
    </aop:config>

    <!--配置事務增強 事務如何切入-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!--
            <tx:method name="list*" read-only="true"/>
            <tx:method name="get*" read-only="true" /> -->
            <tx:method name="*WithLock" isolation="SERIALIZABLE"/>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>



    <!-- 啓用對事務註解的支持 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!--定時器配置-->
    <task:executor id="executor" pool-size="30" />
    <task:scheduler id="myScheduler" pool-size="10"/>
    <task:annotation-driven scheduler="myScheduler" executor="executor"/>

</beans>

2.6 spring-servlet.xml

在resources下創建spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
	http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-4.3.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
	http://www.springframework.org/schema/mvc
	http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
	">

    <!--兩個標準配置,就是無論如何都需要配置的內容  -->
    <!-- 將springmvc不能處理的請求交給tomcat -->
    <mvc:default-servlet-handler/>
    <!-- 能支持springmvc更高級的一些功能,JSR303校驗,快捷的ajax...映射動態請求 -->
    <mvc:annotation-driven/>

    <!--Spring MVC 的配置文件,包含網站跳轉的控制
    此時的掃描纔是掃描Controller,開啓Controller註解-->
    <context:component-scan base-package="com.laowang" use-default-filters="false">
        <!--只掃描控制器-->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:include-filter>
    </context:component-scan>

    <!-- 使用fastJson來支持JSON數據格式 -->
    <!--<bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">-->
        <!--<property name="supportedMediaTypes">-->
            <!--<list>-->
                <!--<value>text/html;charset=UTF-8</value>-->
                <!--<value>application/json</value>-->
            <!--</list>-->
        <!--</property>-->
        <!--<property name="features">-->
            <!--<list>-->
                <!--<value>WriteMapNullValue</value>-->
                <!--<value>QuoteFieldNames</value>-->
                <!--<value>WriteNullListAsEmpty</value>-->
                <!--<value>WriteNullStringAsEmpty</value>-->
                <!--<value>DisableCircularReferenceDetect</value>-->
            <!--</list>-->
        <!--</property>-->
    <!--</bean>-->

    <mvc:annotation-driven validator="validator">
        <mvc:message-converters register-defaults="true">
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="features">
                    <list>
                        <value>WriteMapNullValue</value>
                        <value>QuoteFieldNames</value>
                        <value>WriteNullListAsEmpty</value>
                        <value>WriteNullStringAsEmpty</value>
                        <value>DisableCircularReferenceDetect</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <mvc:cors>
        <mvc:mapping path="/**"/>
    </mvc:cors>

    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- set the max upload size5MB -->
        <property name="maxUploadSize">
            <value>5242880</value>
        </property>
        <property name="maxInMemorySize">
            <value>4096</value>
        </property>
    </bean>



    <mvc:resources location="/resources/" mapping="resources/**" />

    <!--<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">-->
        <!--<property name="securityManager" ref="securityManager" />-->
    <!--</bean>-->

    <context:annotation-config />
    <!-- 開啓註解-->
    <aop:aspectj-autoproxy proxy-target-class="true"/>
    <!--
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
      depends-on="lifecycleBeanPostProcessor" /> -->

    <!-- 配置校驗器 -->
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!-- 校驗器,使用hibernate校驗器 -->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
        <!-- 指定校驗使用的資源文件,在文件中配置校驗錯誤信息,如果不指定則默認使用classpath下面的ValidationMessages.properties文件 -->
        <property name="validationMessageSource" ref="messageSource"/>
    </bean>

    <!-- 校驗錯誤信息配置文件 -->
    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <!-- 資源文件名 -->
        <!-- 資源文件編碼格式 -->
        <property name="defaultEncoding" value="utf-8"/>
        <property name="useCodeAsDefaultMessage" value="false"/>
        <!-- 對資源文件內容緩存時間,單位秒 -->
        <property name="cacheSeconds" value="1800"/>
    </bean>

</beans>

2.7 web.xml

修改webapp/WEB-INF下的 web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">


    <!--<display-name>Archetype Created Web Application</display-name>-->
    <!--Spring MVC 配置 並添加監聽
    啓動spring容器,並且需要配置Spring的配置文件,這樣Spring容器才能夠正確的啓動-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <!-- 字符過濾器 傳值亂碼-->
    <filter>
        <filter-name>encodingFilter</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>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--配置監聽器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--配置前端控制器 進行請求分發 DispatcherServlet本質也是一個Servlet -->
    <servlet>
        <!--名字可以自定義-->
        <servlet-name>spring-demo</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-servlet.xml</param-value>
        </init-param>
        <!--標記容器啓動的時候就啓動這個servlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring-demo</servlet-name>
        <!--攔截所有-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

2.8 index.jsp(可選擇性修改)

修改webapp下index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>SSM項目搭建服務</title>
  </head>
  <body>
  服務開啓成功!</br>
  <script type="text/javascript">document.write(new Date())</script>
  </body>
</html>

修改後啓動tomcat會按照下面顯示:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章