zoukankan      html  css  js  c++  java
  • SSM框架整合Demo

    目前项目大都开始采用SSM结构进行搭建,因为涉及项目比较多,新来的需求都是从现有项目中迁移一份出来进行修改,有的时候两个项目差别还是比较大,并不完全需要原有项目的东西,进行删减也是一项费神费时的事情,这里拉一个简单的demo,后续新的需求直接改用该项目。

    具体如下几个步骤,搭建一个简单的基于maven的SSM Demo

    1、创建maven项目

    而后按照next下一步设置相关的目录等,搭建完的初始项目结构如下图所示:

    2、增加java、resources等目录

    增加test、java、resources目录,并设置成对应的资源文件,操作如下图:

    3、修改pom文件,引入spring、mybatis等jar文件

    这里根据以往项目的需求,引入了常用的jar,具体如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.module</groupId>
      <artifactId>com.module</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <name>com.module Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <!-- spring版本号 -->
        <spring.version>4.3.12.RELEASE</spring.version>
        <!-- mybatis版本号 -->
        <mybatis.version>3.2.6</mybatis.version>
        <!-- log4j日志文件管理包版本 -->
        <slf4j.version>1.7.7</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
      </properties>
    
      <dependencies>
        <!-- 单元测试 -->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <!-- 表示开发的时候引入,发布的时候不会加载此包 -->
          <scope>test</scope>
        </dependency>
        <!-- spring核心包 -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-oxm</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</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>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <!-- mybatis核心包 -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>${mybatis.version}</version>
        </dependency>
        <!-- mybatis/spring包 -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>1.2.2</version>
        </dependency>
        <!-- 导入java ee jar 包 -->
        <dependency>
          <groupId>javax</groupId>
          <artifactId>javaee-api</artifactId>
          <version>7.0</version>
        </dependency>
        <!-- 导入Mysql数据库链接jar包 -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.30</version>
        </dependency>
        <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
        <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-dbcp2</artifactId>
          <version>2.1.1</version>
        </dependency>
        <!-- JSTL标签类 -->
        <dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
        <!-- 日志文件管理包 -->
        <!-- log start -->
        <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>${log4j.version}</version>
        </dependency>
        <!-- 格式化对象,方便输出日志 -->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.23</version>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>${slf4j.version}</version>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>${slf4j.version}</version>
        </dependency>
        <!-- log end -->
        <!-- 映入JSON -->
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.5.3</version>
        </dependency>
        <!-- 上传组件包 -->
        <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.3.1</version>
        </dependency>
        <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.4</version>
        </dependency>
        <dependency>
          <groupId>commons-codec</groupId>
          <artifactId>commons-codec</artifactId>
          <version>1.9</version>
        </dependency>
    
        <dependency>
          <groupId>commons-beanutils</groupId>
          <artifactId>commons-beanutils</artifactId>
          <version>1.9.3</version>
        </dependency>
    
        <!-- Gson json解析 -->
        <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
          <version>2.8.0</version>
        </dependency>
    
        <dependency>
          <groupId>org.jsoup</groupId>
          <artifactId>jsoup</artifactId>
          <version>1.10.2</version>
        </dependency>
    
        <!-- kaptcha图形验证码 -->
        <dependency>
          <groupId>com.github.penggle</groupId>
          <artifactId>kaptcha</artifactId>
          <version>2.3.2</version>
        </dependency>
    
        <!-- httpclient 网络工具 -->
        <dependency>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>httpclient</artifactId>
          <version>4.5.2</version>
        </dependency>
        <dependency>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>httpcore</artifactId>
          <version>4.4.5</version>
        </dependency>
        <dependency>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>httpmime</artifactId>
          <version>4.5.2</version>
        </dependency>
        <dependency>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>httpclient-cache</artifactId>
          <version>4.5.2</version>
        </dependency>
    
      </dependencies>
    
      <build>
        <finalName>com.module</finalName>
        <!-- 添加配置能够将sources root下的xml文件注入 -->
        <resources>
          <resource>
            <directory>src/main/java</directory>
            <includes>
              <include>**/*.xml</include>
            </includes>
          </resource>
        </resources>
      </build>
    </project>
    View Code

    4、添加日志文件、jdbc、spring-mvc.xml及spring-mybatis.xml等文件

    log4j.properties文件内容为:

    #日志输出级别,控制台,debug文件,error文件
    log4j.rootLogger = info,stdout,D,E  
    
    #定义日志输出目的地为控制台
    log4j.appender.stdout = org.apache.log4j.ConsoleAppender  
    log4j.appender.stdout.Target = System.out  
    #可以灵活地指定日志输出格式,下面一行是指定具体的格式
    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout  
    log4j.appender.stdout.layout.ConversionPattern = [%c] - %m%n 
    
    #文件大小到达指定尺寸的时候产生一个新的文件
    log4j.appender.D = org.apache.log4j.DailyRollingFileAppender  
    #指定输出目录  到tomcat/logs下
    log4j.appender.D.File = ../logs/webtest-debug.log  
    #定义文件最大大小
    log4j.appender.D.MaxFileSize = 10MB  
    log4j.appender.D.Append = true  
    log4j.appender.D.Threshold = DEBUG   
    log4j.appender.D.layout = org.apache.log4j.PatternLayout  
    log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n  
    
    #文件大小到达指定尺寸的时候产生一个新的文件
    log4j.appender.E = org.apache.log4j.DailyRollingFileAppender  
    #指定输出目录  到tomcat/logs下
    log4j.appender.E.File = ../logs/webtest-error.log  
    #定义文件最大大小
    log4j.appender.E.MaxFileSize = 10MB  
    log4j.appender.E.Append = true  
    log4j.appender.E.Threshold = ERROR   
    log4j.appender.E.layout = org.apache.log4j.PatternLayout  
    log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
    
    
    log4j.logger.org.springframework=ERROR
    
    #显示SQL语句部分
    #log4j.logger.com.mybatis=DEBUG
    #log4j.logger.com.mybatis.common.jdbc.SimpleDataSource=DEBUG
    #log4j.logger.com.mybatis.common.jdbc.ScriptRunner=DEBUG
    #log4j.logger.com.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
    log4j.logger.java.sql.Connection=DEBUG,stdout
    log4j.logger.java.sql.Statement=DEBUG,stdout 
    log4j.logger.java.sql.PreparedStatement=DEBUG,stdout
    View Code

    jdbc.properties文件内容为:

    driver=com.mysql.jdbc.Driver
    
    #开发环境库
    url-test=jdbc:mysql://IP(替换成数据库ip地址):3306/test?useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true
    username-test=root
    password-test=pass123
    
    #定义初始连接数
    initialSize=0
    #定义最大连接数
    maxTotal=20
    #定义最大空闲
    maxIdle=20
    #定义最小空闲
    minIdle=1
    #定义最长等待时间
    maxWaitMillis=60000
    #空闲回收期运行周期(60秒)
    timeBetweenEvictionRunsMillis=60000
    View Code

    spring-mvc.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: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-3.1.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context-3.1.xsd
                            http://www.springframework.org/schema/mvc
                            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    
        <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
        <context:component-scan base-package="com.zhouyh.controller" />
        <context:component-scan base-package="com.zhouyh.service" />
    
        <!--避免IE执行AJAX时,返回JSON出现下载文件 -->
        <bean id="mappingJackson2HttpMessageConverter"
              class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <value>text/html;charset=UTF-8</value>
                </list>
            </property>
        </bean>
    
        <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
            <property name="messageConverters">
                <list>
                    <ref bean="mappingJackson2HttpMessageConverter" />    <!-- JSON转换器 -->
                </list>
            </property>
        </bean>
    
        <!-- Configures the @Controller programming model -->
        <mvc:annotation-driven />
        <!-- Handles HTTP GET requests for /resources/** by efficiently serving
            up static resources in the ${webappRoot}/resources/ directory -->
        <!-- 放置静态文件,不做处理的,可以直接访问,即浏览器输入地址就可以直接访问 -->
        <mvc:resources mapping="/resources/**" location="/resources/" />
    
        <!-- 定义跳转的文件的前后缀 ,视图模式配置 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
            <!-- 在webapp下有一个放置页面的文件夹pages -->
            <property name="prefix" value="/pages/" />
            <property name="suffix" value=".jsp" />
        </bean>
    
        <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <!-- 默认编码 -->
            <property name="defaultEncoding" value="utf-8" />
            <!-- 文件大小最大值 -->
            <property name="maxUploadSize" value="10485760000" />
            <!-- 内存中的最大值,写大时小文件不会生产临时文件,影响同步 -->
            <property name="maxInMemorySize" value="1" />
        </bean>
    
        <!-- 配置kaptcha验证码 -->
        <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
            <property name="config">
                <bean class="com.google.code.kaptcha.util.Config">
                    <constructor-arg type="java.util.Properties">
                        <props>
                            <!-- 图片无边框 -->
                            <prop key="kaptcha.border">no</prop>
                            <!-- 图片宽度 -->
                            <prop key="kaptcha.image.width">100</prop>
                            <!-- 图片高度 -->
                            <prop key="kaptcha.image.height">42</prop>
                            <!-- 噪点实现类 -->
                            <prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.NoNoise</prop>
                            <!-- 图片样式 -->
                            <prop key="kaptcha.obscurificator.impl">com.boryou.yuqing.util.CaptchaRender</prop>
                            <!-- 背景颜色渐变,开始颜色 -->
                            <prop key="kaptcha.background.clear.from">215,235,241</prop>
                            <!-- 背景颜色渐变,结束颜色 -->
                            <prop key="kaptcha.background.clear.to">215,235,241</prop>
                            <!-- 验证码文字取值范围 -->
                            <prop key="kaptcha.textproducer.char.string">0123456789</prop>
                            <!-- 验证码长度 -->
                            <prop key="kaptcha.textproducer.char.length">5</prop>
                            <!-- 验证码文字颜色 -->
                            <prop key="kaptcha.textproducer.font.color">0,161,233</prop>
                            <!-- 验证码文字大小 -->
                            <prop key="kaptcha.textproducer.font.size">30</prop>
                        </props>
                    </constructor-arg>
                </bean>
            </property>
        </bean>
    </beans>
    View Code

    spring-mybatis.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: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-3.1.xsd    
                            http://www.springframework.org/schema/context    
                            http://www.springframework.org/schema/context/spring-context-3.1.xsd    
                            http://www.springframework.org/schema/mvc    
                            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
        
        <!-- 引入配置文件 -->
        <bean id="propertyConfigurer"
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="location" value="classpath:jdbc.properties" />
        </bean>
    
        <!-- 本系统数据库配置 -->
        <bean id="dataSource-base" class="org.apache.commons.dbcp2.BasicDataSource"
            destroy-method="close">
            <property name="driverClassName" value="${driver}" />
            <!-- 初始化连接大小 -->
            <property name="initialSize" value="${initialSize}"/>
            <!-- 连接池最大数量 -->
            <property name="maxTotal" value="${maxTotal}"/>
            <!-- 连接池最大空闲 -->
            <property name="maxIdle" value="${maxIdle}"/>
            <!-- 连接池最小空闲 -->
            <property name="minIdle" value="${minIdle}"/>
            <!-- 获取连接最大等待时间 -->
            <property name="maxWaitMillis" value="${maxWaitMillis}"/>
            <!-- 指明连接是否被空闲连接回收器(如果有)进行检验 -->
            <property name="testWhileIdle" value="true"/>
            <!-- 运行一次空闲连接回收器的时间间隔(60秒)-->
            <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}"/>
            <!-- 验证时使用的SQL语句 -->
            <property name="validationQuery" value="SELECT 1" />
            <!-- 借出连接时不要测试,否则很影响性能 -->
            <property name="testOnBorrow" value="false"/>
        </bean>
        <!-- 开发环境库 -->
        <bean id="dataSource-test" parent="dataSource-base">
            <property name="url" value="${url-test}" />
            <property name="username" value="${username-test}" />
            <property name="password" value="${password-test}" />
        </bean>
    
    
        <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource-test" />
            <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
            <!-- 自动扫描mapping.xml文件 -->
            <property name="mapperLocations" value="classpath:com/zhouyh/mapper/*.xml"></property>
        </bean>
    
        <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.zhouyh.dao" />
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        </bean>
    
        <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
        <bean id="transactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource-test" />
        </bean>
    
    
    </beans>
    View Code

    5、根据需要添加controller、dao、mapper、service等文件,整合web.xml文件

    web.xml文件内容为

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
             version="3.0">
      <display-name>Archetype Created Web Application</display-name>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    
      <!-- web.xml配置 -->
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mybatis.xml</param-value>
      </context-param>
      <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
      </servlet>
      <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
      </listener>
    
    </web-app>
    View Code

    6、最后完成项目整体结构如图所示:

    至此,简单的Demo已经完成。

     代码上传到了GitHub上,链接为:MavenWebDemo

  • 相关阅读:
    迭代器和生成器
    案例:复制大文件
    案例:使用seek倒查获取日志文件的最后一行
    Leetcode165. Compare Version Numbers比较版本号
    Leetcode137. Single Number II只出现一次的数字2
    Leetcode129. Sum Root to Leaf Numbers求根到叶子节点数字之和
    Leetcode116. Populating Next Right Pointers in Each Node填充同一层的兄弟节点
    Leetcode114. Flatten Binary Tree to Linked List二叉树展开为链表
    Leetcode113. Path Sum II路径总和2
    C++stl中vector的几种常用构造方法
  • 原文地址:https://www.cnblogs.com/yhzhou/p/9156281.html
Copyright © 2011-2022 走看看