美文网首页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