美文网首页java
【后台学习教程】 基于SSM框架的JavaWeb搭建

【后台学习教程】 基于SSM框架的JavaWeb搭建

作者: 猫留下你走吧 | 来源:发表于2018-04-30 14:16 被阅读1324次

前言

SSM框架集是指Spring、SpringMVC、MyBatis三大开源框架整合而成Java后台框架。相对于已经成熟的框架SSH(Sturts2+Spring+Hibernate),个人更愿意学习SSM,因为目前越来越受到公司的欢迎。

感谢

在这里,我要特别感谢带我入坑Java Web的dalao,也是他无私的分享精神,让我坚持开源技术知识给大家!CSDN博客作者:小啊小木头

准备工具:

  • IDEA
  • Tomcat
  • MySQL

教程

-1- 准备工作

确认安装了JDK、IDEA(下载专业版)、MySQL(本地可不安装,可使用云服务器的数据库)。安装不是本教程重点,自行解决。

-2- 创建项目

打开IDEA,创建一个新项目。项目基于Maven的Java Web。Maven是一种非常好用便捷的包管理工具,感兴趣自己可以查查资料。


QQ截图20180430105941.png

填写项目信息

  • GroupId:组织名,一般是域名反写,也常做项目包名目录
  • ArtifactId:项目名,一般做为工程名,也是根文件夹名


    QQ截图20180430111246.png

    选择Maven版本
    IDEA有自带版本。如果熟悉maven,电脑且安装了Maven也可以用自己的。右边选择自己Maven的目录


    QQ截图20180430111016.png

点击Finish保存项目

QQ截图20180430111028.png
初始化加载
第一次使用IDEA,项目创建需要下载并初始化各种各样的东西,需要占用大量的时间。加载完成的标志是会发现有一个src目录
QQ截图20180430111508.png
关于里面各个文件以及文件夹,大家可以看我这篇笔记:【后台学习笔记】基于Maven的Web项目目录结构与作用介绍(IDEA)
-2- 完善项目结构

main目录下创建:

  • java文件夹:用于存放后台代码
  • resources文件夹:用于存放后台配置文件
    针对以上两个目录,还要标记文件夹,图片以resources文件夹为例。标记resources为资源根目录(Resources Root)。同样还需要标记java文件夹为Sources Root


    QQ截图20180430115902.png

    在java目录下,我们先创建几个包。根据自己的项目逻辑结构。最主要是后面的四个包,采用SSM框架,分层的结构思想:

  • controller:控制层。Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。
  • dao: 持久层。DAO层主要是做数据持久层的工作,主要与数据库进行交互。DAO层首先会创建DAO接口,然后会在配置文件中定义该接口的实现类,接着就可以在模块中就可以调用DAO 的接口进行数据业务的而处理,并且不用关注此接口的具体实现类是哪一个类。DAO 层的数据源和数据库连接的参数数都是在配置文件中进行配置的。
  • entity:实体层。也就是我们存放实体类的包。
  • service:业务层。Service层主要负责业务模块的逻辑应用设计。是持久层的实现类。封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得非常简洁。
    接下来是前端部分:
    webapp目录下创建:
  • css:存放前端css文件
  • js:存放前端JavaScript文件
  • images:存放前端图片
  • fonts:存放前端的字体文件
    在WEB-INF目录下创建:
  • views:存放前端网页(JSP文件)
    同时在view的文件夹下创建:
  • index.jsp:这里我们把所有的网页文件放在views文件目录下需要删除webapp文件夹下的index.jsp,这里我们不需要用它。
    最后的目录结构是:


    QQ截图20180430132546.png
-3- 添加框架所需要的jar包

导入的包大致包括:Spring以及SpringMVC核心包、log4j日志包、mysql驱动包、MyBatis核心包。日后需要做其他的功能,例如分页、文件上传等。大家就可以按需添加一些外部包来实现快速开发了~

pom.xml
<?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>hellomiao.cn</groupId>
  <artifactId>SSMDemo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>SSMDemo Maven Webapp</name>
  <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.2.5.RELEASE</spring.version>
      <!-- mybatis版本号 -->
      <mybatis.version>3.2.4</mybatis.version>
    <!-- log4j日志文件管理包版本 -->
    <slf4j.version>1.6.6</slf4j.version>
    <log4j.version>1.2.12</log4j.version>
  </properties>

  <dependencies>
    <!-- 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>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-websocket</artifactId>
      <version>4.3.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-messaging</artifactId>
      <version>4.3.3.RELEASE</version>
    </dependency>
    <!-- spring end -->
    <!-- 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>
    <!-- mysql驱动包 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.29</version>
    </dependency>
    <!-- commons -->
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.4</version>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1</version>
    </dependency>
    <dependency>
      <groupId>commons-pool</groupId>
      <artifactId>commons-pool</artifactId>
      <version>1.5.6</version>
    </dependency>
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
    <dependency>
      <groupId>commons-beanutils</groupId>
      <artifactId>commons-beanutils</artifactId>
      <version>1.8.3</version>
    </dependency>
    <dependency>
      <groupId>commons-httpclient</groupId>
      <artifactId>commons-httpclient</artifactId>
      <version>3.1</version>
    </dependency>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.1</version>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.9</version>
    </dependency>
    <dependency>
      <groupId>javax.annotation</groupId>
      <artifactId>jsr250-api</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>net.sf.ezmorph</groupId>
      <artifactId>ezmorph</artifactId>
      <version>1.0.6</version>
    </dependency>
    <dependency>
      <groupId>javax.activation</groupId>
      <artifactId>activation</artifactId>
      <version>1.1</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <!-- 日志文件管理包 -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</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-core</artifactId>
      <version>2.7.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.7.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.7.1</version>
    </dependency>
    <dependency>
      <groupId>net.sf.json-lib</groupId>
      <artifactId>json-lib</artifactId>
      <version>2.4</version>
      <classifier>jdk15</classifier>
    </dependency>
  </dependencies>

  <build>
    <finalName>SSMDemo</finalName>
      <plugins>
        <!-- mybatis.generator -->
        <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.2</version>
          <configuration>
            <!--允许移动生成的文件-->
            <verbose>true</verbose>
            <!--允许覆盖生成的文件-->
            <overwrite>true</overwrite>
          </configuration>
        </plugin>
      </plugins>
  </build>
</project>
-3- 添加数据库配置文件

在resources文件下新建一个文件:jdbc.properties

jdbc.properties
driver=com.mysql.jdbc.Driver
# 数据库地址
# 本机IP用localhost,云服务器改为对应的公网IP
# url=jdbc:mysql://IP地址:端口号/数据库名?useUnicode=true&characterEncoding=utf-8
url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8
#数据库用户名
username=root
#数据库的密码
password=*********************************
#定义初始连接数
initialSize=0
#定义最大连接数
maxActive=20
#定义最大空闲
maxIdle=20
#定义最小空闲
minIdle=1
#定义最长等待时间
maxWait=60000
-4- 添加日志配置文件

在resources目录下创建文件:log4j.properties
这里我们把日志文件存放在tomcat目录下的logs文件夹内

log4j.properties
### set log levels ###
log4j.rootLogger = INFO,D

###输出到控制台###
log4j.logger.toConsole=debug,stdout
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 =%d{yyyy-MM-dd HH\:mm\:ss} [%5p] - %c -%F(%L) -%m%n

### 输出到日志文件 ###
##  其中File 可以采用绝对路径 亦可以采用相对路径 catalina.home 是tomcat目录  如果没有logs文件夹 将会报错
##  更加倾向于将日志文件放在  tomcat的日志目录下${catalina.home}/logs/xxx.log
##  绝对路径如:e:/xxx.log
log4j.logger.daily=INFO,D
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ${catalina.home}/logs/demo.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern =%d{yyyy-MM-dd HH\:mm\:ss} [%5p] - %c -%F(%L) -%m%n
-5-添加Spring配置文件

在resources目录下新建spring文件夹,新建一个springConfig.xml文件

springConfig.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: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/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd"  >

   <!-- ①:对ssm.demo包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
   <context:component-scan base-package="ssm.demo"/>
   <mvc:annotation-driven />
   <!-- 静态资源访问 -->
   <!--如果webapp下你新建了文件夹,想访问里面的静态资源,那么就要在这配置一下-->
   <mvc:resources location="/images/" mapping="/images/**"/>
   <mvc:resources location="/css/" mapping="/css/**"/>
   <mvc:resources location="/fonts/" mapping="/fonts/**"/>
   <mvc:resources location="/js/" mapping="/js/**"/>

   <!-- Configures the @Controller programming model
   <mvc:annotation-driven />-->
   <!-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
   <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
       <property name="messageConverters">
           <list>
               <ref bean="mappingJacksonHttpMessageConverter"/>
           </list>
       </property>
   </bean>

   <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
       <property name="supportedMediaTypes">
           <list>
               <value>application/json;charset=UTF-8</value>
           </list>
       </property>
   </bean>





   <!-- 配置视图解析器,把控制器的逻辑视频映射为真正的视图 -->
   <!-- /WEB-INF/jsp/start.jsp -->
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
       <property name="prefix" value="/WEB-INF/views/" />
       <property name="suffix" value=".jsp" />
   </bean>




   <!-- 配置dbcp数据库连接池 -->
   <!-- <context:property-placeholder location="classpath:db.properties"/> -->
   <!--数据库配置 -->
   <bean id = "propertyConfigurer" class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="locations">
           <list>
               <value>classpath:jdbc.properties</value>
           </list>
       </property>
   </bean>

   <!-- 数据库连接池 -->
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
       <property name="driverClassName" value="${driver}"/>
       <property name="url" value="${url}"/>
       <property name="username" value="${username}"/>
       <property name="password" value="${password}"/>
       <property name="initialSize" value="1"/>
       <property name="maxActive" value="100"/>
       <property name="maxIdle" value="5"/>
       <property name="maxWait" value="80000"/>
   </bean>


   <!-- 配置事务管理器 -->
   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <property name="dataSource" ref="dataSource" />
   </bean>

   <!-- 拦截器 -->
   <mvc:interceptors>
       <!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 -->
       <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
   </mvc:interceptors>
   <!-- 定义无Controller的path<->view直接映射 -->
   <mvc:view-controller path="/" view-name="redirect:/" />

</beans>
-6-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" 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>helloworld</display-name>
  <!-- 配置编码方式-->
  <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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- 配置springmvc的前端控制器 指向spring-mvc.xml 程序在启动的时候就加载springmvc 可以接受所有请求 load-on-startup:表示启动容器时初始化该Servlet; -->
  <servlet>
    <servlet-name>springServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 可以自定义servlet.xml配置文件的位置和名称, 默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value> classpath:spring/springConfig.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 将前端URL请求和后台处理方法controller建立对应关系-->
  <servlet-mapping>
    <servlet-name>springServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!-- Spring配置 -->
  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
  <!-- 取消对某一类文件的拦截-->
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.md</url-pattern>
  </servlet-mapping>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value> classpath:spring/springConfig.xml</param-value>
  </context-param>
  <!-- 欢迎页面-->
  <welcome-file-list>
    <welcome-file>/WEB-INF/views/index.jsp</welcome-file>
  </welcome-file-list>
  <!--404错误展示页面,可自行配置-->
  <!--<error-page>-->
  <!--<error-code>404</error-code>-->
  <!--<location>/WEB-INF/views/404.jsp</location>-->
  <!--</error-page>-->
  <!--设置session失效时间为30分钟 -->
  <session-config>
    <session-timeout>600</session-timeout>
  </session-config>
</web-app>
-7-配置运行环境

右上角编辑


QQ截图20180430135914.png

选择tomcat服务器(需要专业版的支持)


QQ截图20180430135937.png
选择需要运行war包,测试就选择第二个
QQ截图20180430140119.png

选择运行的浏览器


QQ截图20180430140150.png
第一次使用需要配置tomcat安装目录,选择configure找到自己的tomcat安装目录即可
-7-运行

对index.jsp做点小修改,可以看到直观的效果。

index.jsp
<%--
  Created by IntelliJ IDEA.
  User: liwenban
  Date: 2018/4/30
  Time: 12:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>SSMDemo</title>
</head>
<body>
<h1 style="text-align: center">这是我的第一个基于SSM框架的javaWeb项目</h1>
</body>
</html>

是不是很熟悉,其实就是HTML啦。有做好的HTML代码,其实可以直接把html代码粘贴到对应的部分。
点击绿色运行按钮运行


QQ截图20180430140629.png

控制台:


QQ截图20180430141243.png
  • 看到红色的别慌,没有显示[严重]都别怕。有问题就去前面配置的日志文件查看什么错误。一定要学会自己找错误去解决!

最后的运行结果:


QQ截图20180430141405.png

结束

这个是SSM框架的搭建,所以还没有涉及到后台是如何交互的。主要是跑通,后面的干货快来了~

相关文章

网友评论

    本文标题:【后台学习教程】 基于SSM框架的JavaWeb搭建

    本文链接:https://www.haomeiwen.com/subject/rrdavxtx.html