搭建SSM开发框架

之前也使用过SSM开发web项目,但是一直没有详细深入的研究。现在准备从头学起,围绕一个或两个小项目,将SSM框架基本流程搞清楚。下面首先进行项目的搭建。

JDK

这个大家自行去官网下载,安装,安装完成后,配置环境变量

JAVA_HOME D:\Android\Java\jdk1.8.0_25
CLASSPATH   .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
PATH             ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

MAVEN

使用maven创建项目,之前已经写过一篇文章,可以参考

创建MAVEN项目

第一步:

第二步:选择创建web项目

第三步:填写项目信息

解决可能的错误

  • 一般创建完成后可以会提示bulid_path中没有server,此时需要右键项目->bulid path->confiure build path
  • 提示Maven update 此时只需要右键项目->MAVEN->UPDATE PROJECT即可
  • el表达式失效 在web.xml中默认的声明版本是2.3,会造成el表达式失效,在创建完成后一定要修改web.xml。将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"
  metadata-complete="true">
  <!-- 修改servlet版本为3.1 -->
</web-app>

添加项目依赖

在pom.xml中添加本项目所需要的依赖,注意默认生成的junit为3.8(3.0的junit是使用编程的方式来进行测试,而junit4是使用注解的方式来运行junit)。依据自己的项目自行添加依赖即可。这里面列出的是大部分可能用到的依赖

<dependencies>
  <dependency>
    <!--3.0的junit是使用编程的方式来进行测试,而junit4是使用注解的方式来运行junit-->
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
  </dependency>
  <!--补全项目依赖-->
  <!--1.日志 java日志有:slf4j,log4j,logback,common-logging
        slf4j:是规范/接口
        日志实现:log4j,logback,common-logging
        使用:slf4j+logback
    -->
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
  </dependency>
  <!--实现slf4j接口并整合-->
  <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
  </dependency>
  <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.7</version>
  </dependency>
  <!--1.数据库相关依赖-->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.35</version>
    <scope>runtime</scope>
  </dependency>
  <dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
  </dependency>
  <!--2.dao框架:MyBatis依赖-->
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.3.0</version>
  </dependency>
  <!--mybatis自身实现的spring整合依赖-->
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.2.3</version>
  </dependency>
  <!--3.Servlet web相关依赖-->
  <dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
  </dependency>
  <dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.4</version>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
  </dependency>
  <!--4:spring依赖-->
  <!--1)spring核心依赖-->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.2.3.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.2.3.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.2.3.RELEASE</version>
  </dependency>
  <!--2)spring dao层依赖-->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.2.3.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>4.2.3.RELEASE</version>
  </dependency>
  <!--3)springweb相关依赖-->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.2.3.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.2.3.RELEASE</version>
  </dependency>
  <!--4)spring test相关依赖-->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.2.3.RELEASE</version>
  </dependency>
  <!-- 时间操作组件 -->
  <dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.5</version>
  </dependency>
  <!-- 文件上传组件 -->
  <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
  </dependency>
  <!-- Apache工具组件 -->
  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.3.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
  </dependency>
  <dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.3</version>
  </dependency>
  <!--添加redis依赖-->
  <dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.7.3</version>
  </dependency>
  <!--prostuff序列化依赖-->
  <dependency>
    <groupId>com.dyuproject.protostuff</groupId>
    <artifactId>protostuff-core</artifactId>
    <version>1.0.8</version>
  </dependency>
  <dependency>
    <groupId>com.dyuproject.protostuff</groupId>
    <artifactId>protostuff-runtime</artifactId>
    <version>1.0.8</version>
  </dependency>
</dependencies>

创建配置文件目录结构

  • mapper存放数据库映射文件
  • spring存放spring配置文件
  • jdbc.properties是数据库信息的配置
  • logback为日志文件,使用的是slf4j+logback
  • mybatis-config.xml是mybatis配置文件

思路:配置web.xml,设置转发器和过滤器,然后是spring配置包扫描、注解等以及将mybatis整合进spring中

配置web.xml

<!--配置DispatcherServlet -->
    <servlet>
        <servlet-name>car-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 配置SpringMVC需要加载的配置文件 spring-dao.xml,spring-service.xml,spring-web.xml -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/spring-*.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>car-dispatcher</servlet-name>
        <!--默认匹配所有的请求 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    <!--配置UTF-8编码 -->
    <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>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

配置spring-web.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-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--配置springMVC -->

    <!--1:开始springMVC注解模式 -->

    <!--简化配置: ①自动注册DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter 
        ②提供一系列:数据绑定,数字和日期的format,@NumberFormat,@DataTimeFormat,xml,json默认读写支持 -->
    <mvc:annotation-driven />
    
    <!--2:静态资源默认servlet配置 ①加入对静态资源的处理:js,css,gif,png ②允许使用"/"做整体映射 -->
    <mvc:default-servlet-handler />

    <!--3:配置JSP 显示ViewResolver -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!--4:扫描web相关的bean -->
    <context:component-scan base-package="com.school.web" />
    <!--5:拦截器 -->
    
    <!--6:利用mvc注解进行上传 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
        p:defaultEncoding="utf-8" />
    <!-- -->

</beans>

配置spring-service.xml

需要修改扫描service包

<?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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">


    <!--扫描service包(包含子包)下所有使用注解的类型-->
    <context:component-scan base-package="com.school.service"></context:component-scan>

    <!--配置事务管理器(mybatis采用的是JDBC的事务管理器)-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--配置基于注解的声明式事务,默认使用注解来管理事务行为-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

</beans>

配置mybatis-config.xml

mybatis官方文档 在resource目录下创建mybatis-config.xml文件,来配置mybatis的配置信息。创建一个mapper文件夹来,存放数据库映射文件。 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>
        <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
        <setting name="useGeneratedKeys" value="true"/>
        <!-- 使用列别名替换列名 默认true
            select name as title from table
         -->
        <setting name="useColumnLabel" value="true"/>
        <!-- 开启驼峰命名转换:Table(create_time)->Entity(createTime) -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

配置spring-dao.xml

在resource/spring文件夹下创建spring-dao.xml。不同项目需要修改扫描entity和扫描dao接口类,两处配置

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 1配置数据库相关参数 -->
    <context:property-placeholder location="classpath:jdbc.properties" />
    <!-- 2:数据库连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <property name="driverClass" value="${driver}" />
        <property name="jdbcUrl" value="${url}" />
        <property name="user" value="${user}" />
        <property name="password" value="${password}" />
        <property name="maxPoolSize" value="30"></property>
        <property name="minPoolSize" value="10"></property>
        <property name="autoCommitOnClose" value="false"></property>
        <!-- 超时时间 -->
        <property name="checkoutTimeout" value="1000"></property>
        <!-- 当获取连接失败重试次数 -->
        <property name="acquireRetryAttempts" value="2"></property>
    </bean>
    <!-- 3:配置sqlsessionfactory对象 -->
    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <!-- 扫描entity包,使用别名 -->
        <property name="typeAliasesPackage" value="com.school.entity" />
        <!-- 自动扫描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
    </bean>
    <!-- 4:DAO接口所在包名,Spring会自动查找其下的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.school.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
</beans>

此处用到了jdbc.properties,文件内容为不同项目需要修改

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf-8
user=root
password=root

logback

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

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are  by default assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

运行项目

将项目放到tomcat容器中,运行,在地址栏查看是否运行成功

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构沉思录

揭秘JDBC超时机制

在遭到DDos攻击后,整个服务都垮掉了。由于第四层交换机不堪重负,网络变得无法连接,从而导致业务系统也无法正常运转。安全组很快屏蔽了所有的DDos攻击,并恢复了...

22130
来自专栏Java技术栈

Spring Boot - Profile不同环境配置

Profile是什么 Profile我也找不出合适的中文来定义,简单来说,Profile就是Spring Boot可以对不同环境或者指令来读取不同的配置文件。 ...

42640
来自专栏云原生架构实践

JHipster生成微服务架构的应用栈(二)- 认证微服务示例

这里选择JHipster UAA server,这是一种基于OAuth认证机制的微服务。

31940
来自专栏惨绿少年

KICKSTART无人值守安装

1.1 环境说明 [root@test ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [roo...

31400
来自专栏乐百川的学习频道

Intellij IDEA 2017.3 基于编辑器的REST客户端介绍

最近Intellij IDEA更新到了2017.3这一版本,这个版本又增加了很多新功能。我觉得其中这个基于编辑器的REST客户端这个功能很不错,可以为我们带来很...

26380
来自专栏JAVA同学会

Zookeeper 3.5启动时 8080端口被占用

今天闲来无事,学习Zookeeper,下载了Zookeeper的最新版本3.5。启动以后显示:

21210
来自专栏小狼的世界

在Centos 5.2下编译安装LAMP

首先使用Virtualbox安装一台CentOS 5.2的虚拟机,网络连接采用 Host-only Adapter,这样主客机之间可以互相访问,但是客机不能够上...

12020
来自专栏FreeBuf

Web应用手工渗透测试——用SQLMap进行SQL盲注测试

作者 Taskiller 简介 本文主要关注SQL注入,假设读者已经了解一般的SQL注入技术,在我之前的文章中有过介绍,即通过输入不同的参数,等待服务器的反应,...

378100
来自专栏向治洪

深入理解Android Build系统

概述 Android Build 系统是用来编译 Android 系统、Android SDK 以及相关文档的一套框架。在Android系统中,Android ...

22760
来自专栏云计算教程系列

如何在Ubuntu上安装Ruby和Sinatra

如果选择几个词来定义Sinatra,那么肯定会是设计简洁,给人启发。这种项目构建的想法引领了很多项目的构建潮流——跨越不同的编程语言和平台的编程方案。

14840

扫码关注云+社区

领取腾讯云代金券