热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SSM博客系统开发实战

课程简介SSM框架即SpringMVC+Spring+Mybatis,相比SSH(Struts2+Spring+Hibernate)来说较新,SpringMVC可与Spring更好

课程简介

SSM 框架即 SpringMVC+Spring+Mybatis,相比 SSH(Struts2+Spring+Hibernate)来说较新,SpringMVC 可与 Spring 更好的整合,Mybatis 相比 Hibernate 使用更简单、轻便,大部分公司都在使用 SSM 这套框架,主要是轻量级、易使用,故本达人课特选择 SSM 框架作为课程主题,希望通过实战项目让大家对 SSM 框架及其他相关技术有一个清楚的认识,并能够正确的运用到项目中去。

通过本课程,您将学习到以下内容:

  1. SSM 框架的搭建及使用;
  2. MySQL 数据库的基本使用方法;
  3. Redis 缓存数据库的配置及使用方法;
  4. ActiveMQ 消息中间件的配置及使用;
  5. Spring Security 安全框架的整合及使用;
  6. Ajax 异步更新技术;
  7. Solr 搜索引擎技术;
  8. Bootstrap、ZUI 等前端框架的组件及控件的使用;
  9. Linux 系统部署及发布项目。

本课程共包含三大部分:

第一部分(第1-4篇),基础环境搭建,包括 SSM 框架的整合,MySQL 表结构设计、实体类的生成、接口的设计等。

第二部分(第5-17篇),项目主要功能的实现,包括登录、注册、激活、首页展示及分页、评论回复点赞模块、个人主页、资料修改等功能的实现。通过实战直观、深入的了解 SSM 框架开发的特点及对各个技术点的掌握。

第三部分(第18-19篇),将项目打成 War 包并部署到 Linux 系统进行发布。最后对整个开发过程做一个总结。包括知识点的总结以及在开发工程中可能遇到的一些问题等。

作者介绍

王林永,现就职于某网络公司担任 Java 高级工程师,CSDN 博客作者,拥有自己的 Hexo 博客网页,在 Github 上有托管开源项目,擅长 Java 后台开发、Python 开发、C# 开发。

课程内容

导读:为什么选择 SSM 框架开发项目

SSM 框架由 SpringMVC、Spring 和 Mybatis 三大开源框架整合而成,所以了解该框架需先从这三个框架着手。

Spring

Spring 是整个框架的核心,所以我们先从它开始讲起。

Spring 是 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 创建。它解决了业务逻辑层和其他各层的松耦合问题,并将面向接口的编程思想贯穿整个系统应用。简单来说,Spring 是一个分层的 JavaSE/EE Full-Stack(一站式) 轻量级开源框架。为什么说 spring 是分层、一站式、轻量级的框架呢?

首先看分层。JavaEE 经典的 MVC 三层结构为表现层、业务层、持久层,Web表现层负责页面数据显示、页面跳转调度,例如 JSP/Servlet、SpringMVC;Service业务层负责业务处理、功能逻辑和事务控制,例如 Service、JavaBean、EJB;而持久层Dao则负责数据存取和封装,及与数据库打交道,例如 JDBC、Hibernate、Mybatis。

而一站式,则指 Spring 为 JavaEE 的每一层都提供了解决方案,比如:

  • 表现层:Struts1、Struts2、Spring MVC;
  • 业务层:IoC 控制反转、AOP 面向切面编程、事务控制;
  • 持久层:JdbcTemplate、HibernateTemplate、ORM 框架(对象关系映射)的整合。

至于轻量,则是指从大小与开销两方面而言,Spring都是轻量的。完整的 Spring 框架可以在一个大小只有 1MB 多的 Jar 文件里发布。并且 Spring 所需的处理开销也是微不足道的。Spring 的出现解决了 EJB 臃肿、低效、繁琐复杂、脱离现实的情况。而且使用 Spring 编程是非侵入式的。Spring 应用中的对象不依赖于 Spring 的特定类。

Spring 的体系结构

Spring 框架是一个分层架构,它包含一系列的功能要素,被分为大约20个模块。这些模块分为 Core Container、Data Access/Integration、Web、AOP、Aspects、Instrumentation 和 Test,如下图所示:

《SSM 博客系统开发实战》

核心容器(Core Container)包括 Core、Beans、Context、EL 模块。

  1. Core 和 Beans 模块提供了 Spring 最基础的功能,Core 模块是核心,为其他模块提供支持,包括 Spring 的核心工具类。Beans 是 Spring 管理实体类 Bean 的主要模块,提供 IoC 控制反转和依赖注入 DI。控制反转即将控制权由原来的程序员自己管理交给 Spring 来管理,依赖注入就是注入对象实例,有四种方式,即接口注入、setter 方法注入、构造器注入和注解注入。

  2. Context 上下文模块,主要基于 Core 和 Beans 模块,Context 模块的 Context 包继承了 Beans 包的功能,还增加了国际化(I18N)、事件传播等,Context 上下文模块,还包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

  3. Expression Language,表达式语言模块,又称 SpEL,提供了在运行期间查询和操作对象图的强大能力。包含五个主要特性:(1)使用 Bean 的 ID 引用 Bean;(2)调用方法和访问对象的属性;(3)对值进行算术,关系和逻辑运算;(4)正则表达式匹配;(5)集合操作。

Spring 的三大核心

这三大核心分别为 IOC(Inverse of Control 控制反转)、DI(Dependency Injection,依赖注入)和AOP(Aspect Oriented Programming 面向切面编程)。

1.IOC(Inverse of Control 控制反转)

IOC,即将对象创建权利交给Spring工厂进行管理。比如说

Content cOntent= new Content();

现在,可以这样写:

Content cOntent= ContentFactory.getContent();

2.DI(Dependency Injection,依赖注入)

DI 是指在 Spring 框架创建 Bean 对象时,动态地将依赖对象注入到 Bean 组件。简单的说,就是将另外一个 Bean 对象动态地注入到另一个 Bean 中。

DI 的做法是:由 Spring 容器创建 Service、Dao 对象,并且通过注解或配置将 Dao 传入 Servcie,那么 Service 对象就包含了 Dao 对象的引用。比如:

@Service public class UserServiceImpl implements UserService { @Autowired //通过注解注入UserMapper对象 private UserMapper userMapper; }

3.AOP(Aspect Oriented Programming 面向切面编程)

AOP 采取横向抽取机制,取代了传统纵向继承体系重复性代码的编写方式(例如性能监视、事务管理、安全检查、缓存、日志记录等)。

AOP 基于代理思想,对原来目标对象,创建代理对象,在不修改原对象代码情况下,通过代理对象,调用增强功能的代码,从而对原有业务方法进行增强。例如可以在插入 User 对象之前进行打印日志,请看下面的代码示例。

UserService.java:

public interface UserService { void add(User user); }

前置增强类 PrintLogBefore.java:

//前置增强代码 public class PrintLogBefore implements MethodBeforeAdvice { private static final Logger log = Logger.getLogger(PrintLogBefore.class); @Override public void before(Method method, Object[] arguments, Object target) throws Throwable { log.info("在插入User之前执行的方法"); } }

最后配置切入点:

这样在调用 add(User user) 方法之前就会打印如下内容:

“在插入User之前执行的方法”

SpringMVC

Spring 为 Web 表现层提供了一个优秀的框架 SpringMVC。和其他 Web 框架一样,也是基于 MVC 的设计理念,此外,它采用了松耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

SpringMVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,无需任何接口,同时,SpringMVC 还支持 REST 风格的 URL 请求。此外,SpringMVC 在数据绑定、视图解析、本地化处理及静态资源处理上都有许多不俗的表现。它在框架设计、扩展性、灵活性等方面全面超越了 Struts、WebWork 等 MVC 框架,从原来的追赶者一跃成为 MVC 的领跑者。

SpringMVC 框架围绕 DispatcherServlet 这个核心展开,DispatcherServlet 是前端控制器设计模式的实现,提供 Spring Web MVC 的集中访问点,负责职责的分派,而且与 Spring IoC 容器无缝集成,从而可以获得 Spring 的所有好处。

SpringMVC 框架流程

其框架流程,如下图所示:

《SSM 博客系统开发实战》

接下来,我们对每一个子流程做下说明。

  1. 用户发送请求,被 SpringMVC 的前端控制器 DispatcherServlet 拦截。
  2. DispatcherServlet 收到请求后调用 HandlerMapping 处理器映射器。
  3. 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。
  4. DispatcherServlet 调用 HandlerAdapter 处理器适配器。
  5. HandlerAdapter 经过适配器调用具体的处理器(Controller,也叫后端控制器)。
  6. Controller 将结果封装到 ModelAndView 返回给 HandlerAdapter。
  7. HandlerAdapter 将 Controller 执行结果 ModelAndView 返回给 DispatcherServlet。
  8. DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。
  9. ViewReslover 解析后返回具体的 View。
  10. DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。
  11. DispatcherServlet 响应用户。

Mybatis 介绍

Mybatis 的前身是 iBatis,Apache 的一个开源项目,在2010年这个项目从 Apache 迁移到 Google Code 改名为 Mybatis。Mybatis 是一个类似于 Hibernate 的 ORM 持久化框架,支持普通 SQL 查询、存储过程以及高级映射。Mybatis 通过使用简单的 XML 或注解用于配置和原始映射,将接口和 POJO 对象映射成数据库中的记录。由于 Mybatis 是直接基于 JDBC 做了简单的映射包装,所以从性能角度来看

JDBC > Mybatis > Hibernate

Mybatis 特点

主要有以下5大特点:

  1. 支持自定义 SQL、存储过程、高级映射;
  2. 实现自动对 SQL 的参数设置;
  3. 实现自动对结果集进行解析和封装;
  4. 通过 XML 或者注解进行配置和映射,大大减少代码量;
  5. 数据源的连接信息通过配置文件进行配置。

Mybatis 整体架构

整体架构如下图所示:

《SSM 博客系统开发实战》

接下来,对架构的主要部分做下说明:

  1. 配置文件:全局配置文件 mybatis-config.xml,其作用为配置数据源,引入映射文件 Mapper.xml,映射文章的作用是配置 SQL 语句、参数、结果集封装类型等。
  2. SqlSessionFactory:相当于 Hibernate 的 SessionFactory,作用为获取 SqlSession,通过 newSqlSessionFactoryBuilder().build(inputStream) 来构建,inputStream用来读取配置文件的 IO 流。
  3. SqlSession:相当于 Hibernate 的 Session,作用为执行 CRUD 操作。
  4. Executor:执行器,SqlSession 通过调用它来完成具体的 CRUD,它是一个接口,提供了两种实现,即缓存的实现、数据库的实现。
  5. Mapped Statement:在映射文件里面配置,包含3部分内容:具体的 SQL,SQL执行所需的参数类型,SQL 执行结果的封装类型,参数类型和结果集封装类型包括3种,即 HashMap,基本数据类型,POJO。

SSM 框架与 SSH 框架对比

上面我们对 SSM 的各个组成部分做了详细介绍,接下来,我们将通过 SSM 与 SSH 的对比,带大家进一步深入了解 SSM。

其实,SSM 框架与 SSH 框架比较,主要还是 SpringMVC 和 Struts2,Mybatis 和 Hibernate 的对比。

SpringMVC 和 Struts2 比较

我们从机制、性能、参数传递、设计思想四个方面来看看两者的差异:

  1. 机制:SpringMVC 的入口是 Servlet,Struts2 的入口是 Filter, 两者的实现机制不同;
  2. 性能:SpringMVC 稍微比 Struts 快些。SpringMVC 是基于方法的设计,而 Struts2 是基于类,每发一次请求都会实例化一个 action,每个 action 都会被注入属性,而 SpringMVC 基于方法,粒度更细。
  3. 参数传递:Struts2 在接受参数时,可以用属性来接受参数,这就说明参数可被多个方法共享。SpringMVC 是基于方法的设计,传递参数是通过方法形参。多个方法间不能共享。
  4. 设计思想上:Struts2 更加符合 OOP 的编程思想,SpringMVC 就比较谨慎,在 Servlet 上扩展。

Mybatis 和 Hibernate 比较

我们从难易程度、对象管理、优势对比三个方面来看看两者的差异:

  1. 难易程度:Hibernate 的真正掌握要比 Mybatis 难些。Mybatis 框架相对简单容易上手。
  2. 对象管理:Hibernate 是完整的对象/关系映射解决方案,它提供了对象状态管理的功能,使开发者不需要关心底层数据库系统的细节。而 Mybatis 在这一块没有文档说明,用户需要自己对对象进行详细的管理。
  3. 优势对比:Mybatis 可以进行更为细致的 SQL 优化,可以减少查询字段。Hibernate 数据库移植性很好,Mybatis 的数据库移植性不好,不同的数据库需要些不同的 SQL。

综上所述,在性能方面 SSM 框架要优于 SSH 框架,这也是越来越多互联网企业选择 SSM 框架的主要原因。而对于业务逻辑复杂,不太在乎执行效率的传统行业,一般会选择使用 SSH 框架。所以本达人课会选择 SSM 框架来开发,其中应用到的技术将适用于大部分的互联网企业。

第01课:基础环境安装及 Maven 创建父子工程

基础环境安装及配置

JDK 下载及环境变量配置

在官网上,根据自己的系统配置(32/64位)选择相应的版本进行下载(附:下载地址)。下载完成后安装到自己喜欢的目录下。

安装完成后,我们进行环境变量配置。按该步骤进行操作:电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> 系统变量 ->新建。在对应输入框内填入以下内容:

变量名:JAVA_HOME,变量值:D:\softs\java\jdk1.8.0_111 变量名:CLASSPATH,变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

点击已有的 path 变量打开,Win10 系统直接新建,输入:

%JAVA_HOME%\bin

再新建,输入:

%JAVA_HOME%\jre\bin

其他系统直接在 path 变量值的最后添加以下内容,注意与前面的配置要用“;”隔开:

%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

最后通过 cmd 打开命令提示符,键入:

java -version

查看版本号,若出现 Java 版本信息,说明安装并配置成功!

Maven下载并配置环境变量

这里给出它的下载地址,请访问这里。下载完成后解压到自己喜欢的目录下

接下来进行环境变量配置。

配置步骤同上,这次在“新建系统变量”对话框中键入的内容请见下:

变量名:MAVEN_HOME,变量值:D:\softs\java\apache-maven-3.3.9

在 path 变量中加入 MAVEN_HOME:

%MAVEN_HOME%\bin

最后重新打开 cmd 命令提示符,键入:

mvn -version

查看 Maven版本,如出现 Maven 版本信息,说明配置成功!

Maven 创建父子工程

创建 Maven 父工程

如果 IDEA 已打开其他项目,可通过这一操作:File -> Close Project,关闭现有项目,然后通过:Create New Project -> Maven,创建父工程,直接点击 next,父工程就是空的工程,不需要勾选骨架。如下图所示。

《SSM 博客系统开发实战》

填写好 GroupId、ArtifactId、Version 并选择好项目目录后点击 Finish,父工程就创建好了,我们命名为“dreamland”。

创建 Maven 子工程

点击刚创建的父工程 dreamland,然后进行如下操作:File -> New -> Moudle -> Maven,见下图所示:

《SSM 博客系统开发实战》

勾选 Web 骨架后点击 Next,填写好 ArtifactId 后点击 Next。

在这里要选择一个自己的 Maven 路径和仓库位置,还有要添加一个属性:

archetypeCatalog=internal

这个参数的意义是让该 Maven 项目的骨架不要到远程下载而是从本地获取,以提高加载速度。

《SSM 博客系统开发实战》

创建好的整体目录结构如下:

《SSM 博客系统开发实战》

可以看到我们的 dreamland-web 子工程没有 java、resources 和 test 目录,我们需要手动创建一下,操作过程如下:

main -> New -> Directory ==> 创建 java

main -> New -> Directory ==> 创建 resources

src -> New -> Directory ==> 创建 test

test -> New -> Directory ==> 创建 java

test -> New -> Directory ==> 创建 resources

然后对创建好的 java、resources 和 test/java、test/resourcs 目录均右键选择 Mark Diretory as,然后分别进行如下操作:

java -> Sources Root //java源码根目录

resources -> Resources Root//java 配置文件目录

test/java -> Test Sources Root//java 测试源码目录

test/java -> Test Sources Root//java 测试配置文件目录

如下图所示:

《SSM 博客系统开发实战》

最后整体的目录结构如下:

《SSM 博客系统开发实战》

这样 Maven 父子工程就创建好了!

第02课:SSM 框架的搭建

上一篇通过 Maven 已将项目骨架搭好,本文主要向骨架中添充内容,也就是完成配置文件的配置。

我们首先看下 SSM 框架搭建核心步骤:

  1. 在 pom.xml 中添加 Maven 依赖,主要目的是将项目中所需要用到的 jar 包引入到项目,通过 Maven 进行管理。
  2. 配置文件的配置,主要是 web.xml 的配置,数据库连接池的配置,日志文件的配置,SpringMVC 的配置,MyBatis 的配置等,具体配置内容下面会做详细说明。
  3. 添加 Web 服务器 Tomcat,因为项目启动需要载体。
  4. 启动 Tomcat 服务,访问 127.0.0.1:8080 或者 localhost:8080,页面成功访问,即表示 SSM 框架搭建完成。

查看 Maven 的本地仓库

在配置之前,我们需先了解下 Maven 仓库。

Maven 仓库是 Maven 管理 jar 包的地方,有本地仓库,远程仓库和中央仓库之分。本地仓库即存在于本机。远程仓库,可通过配置 settings.xml 获取,比如阿里云的远程仓库。中央仓库为 Maven 的仓库,不配置远程仓库,默认从中央仓库下载 jar 依赖,然而中央仓库在国外,下载起来速度会很慢,所以我们多会选择配置阿里云远程仓库。

如何查看 Maven 本地仓库的位置,具体步骤如下。

首先,打开 CMD 命令窗口,输入如下 Maven 命令,即可查看 Maven 本地仓库的位置。

mvn help:effective-settings

如果没有配置 Maven 本地仓库的位置,默认位置在 C:\Users\你的主机名\.m2\repository 下,如图:

《SSM 博客系统开发实战》

如果你有自己的 Maven 仓库,可在 Maven 的解压目录 apache-maven-3.3.9\conf 下的 settings.xml 中配置。

你的仓库路径

我的 Maven 仓库路径为 D:/repository,配置如下图所示:

《SSM 博客系统开发实战》

上面提到,我们多会使用阿里云远程仓库,接下来我们看看它的配置过程。

首先,配置阿里云镜像。这时我们可在 settings.xml 中找到 mirrors 标签,在 mirrors 标签内配置如下内容:

alimaven aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ central

如下图所示:

《SSM 博客系统开发实战》

配置阿里云镜像的目的是使用阿里云的远程仓库,如果不配置,则默认使用中央仓库,而中央仓库在国外,下载依赖时会很慢。

然后在 file -> settings 中找到 Maven,在下图所示的位置添加 Maven 的路径以及 Maven 配置文件 settings.xml 的路径,仓库的位置(即在 settings.xml 中配置的仓库)将自动显示出来。

《SSM 博客系统开发实战》

选用 MySQL 数据库

MySQL 是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。

因为 MySQL 相比 Oracle 开源、免费,很多企业也在用,所以本课程我们选用 MySQL 数据库作为存储数据库。

如果还没有安装 MySQL 数据的同学请参考这篇博文:《MySQL 安装》。

添加 Maven 依赖

完成了以上的准备工作,接下来,我们就可以正式开始 SSM 的搭建了。首先是添加 Maven 依赖。

Maven 依赖有很多,这里只给出部分依赖,用来正常启动项目。每个依赖都在代码中添加了注释,这里就不赘述了。如果遇到报错,通过 Alt+Enter 组合键进行下载即可。

在 dreamland-web 子工程的 pom.xml 中添加以下代码:

UTF-8 1.7 1.7 4.2.5.RELEASE 3.2.8 5.1.29 1.7.18 1.2.17 4.1.3.RELEASE 1.7.1.RELEASE jstl jstl 1.2 javax javaee-api 7.0 org.springframework spring-core ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-oxm ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-jdbc ${spring.version} org.springframework spring-webmvc ${spring.version} org.springframework spring-context ${spring.version} org.springframework spring-context-support ${spring.version} org.springframework spring-aop ${spring.version} org.springframework spring-test ${spring.version} org.mybatis mybatis ${mybatis.version} org.mybatis mybatis-spring 1.2.2 mysql mysql-connector-java ${mysql-driver.version} commons-dbcp commons-dbcp 1.2.2 log4j log4j ${log4j.version} org.slf4j slf4j-api ${slf4j.version} org.slf4j slf4j-log4j12 ${slf4j.version} org.springframework spring-jms ${spring.version} org.apache.xbean xbean-spring 4.0 commons-beanutils commons-beanutils 1.9.3 tk.mybatis mapper 3.1.2

pom.xml 的位置如下图所示:

《SSM 博客系统开发实战》

配置文件

这一小节,我们将完成配置文件的配置。配置文件的加载顺序以及各配置文件有什么作用,我会在最后进行介绍。

各配置文件位置如下图:

《SSM 博客系统开发实战》

jdbc.properties文件配置——数据库连接的配置

这个配置文件主要是 spring-mybatis.xml 引用的主要参数,jdbc.properties 包括 JDBC 加载类、URL、用户名和密码.

jdbcUrl=jdbc:mysql://localhost:3306/dream_db?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull

上面代码表示使用的是 MySQL 数据库,关于 MySQL 数据库的下载安装,这里不做介绍了,MySQL 数据库的默认端口是3306,端口号后的 dream_db 是你的数据库名称,后面的 useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull是指定字符的编码和解码格式。

配置代码如下:

driverClasss=com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql://localhost:3306/dream_db?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull username=root password=root #定义初始连接数 initialSize=0 #定义最大连接数 maxActive=20 #定义最大空闲 maxIdle=20 #定义最小空闲 minIdle=1 #定义最长等待时间 maxWait=60000

注意 dream_db 是数据库名称,username 和 password 分别是数据库用户名和密码。

log4j.properties文件配置——log日志的配置

log4j.properties 为 log4j 日志配置文件,主要将程序中打印的日志信息输出到控制台、保存到目录文件,可以通过配置设置日志文件的输出级别、格式、输出路径等。

配置代码如下:

log4j.rootLogger=DEBUG,Console,File #日志输出到控制台 og4j.appender.COnsole=org.apache.log4j.ConsoleAppender #指定输出到控制台 log4j.appender.Console.Target=System.out #灵活地指定布局模式 log4j.appender.Console.layout=org.apache.log4j.PatternLayout #日志输出格式设置 log4j.appender.Console.layout.COnversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n #日志输出到文件 log4j.appender.File=org.apache.log4j.RollingFileAppender #日志存放位置 log4j.appender.File.File=D/wly/git/dreamland/logs/run.log #单个日志文件大小设置 log4j.appender.File.MaxFileSize=10MB #输出日志,如果换成DEBUG表示输出DEBUG以上级别日志 log4j.appender.File.Threshold=ALL log4j.appender.File.layout=org.apache.log4j.PatternLayout log4j.appender.File.layout.COnversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n

下面我们解释下以上代码中需要注意的地方。

(1)日志输出级别分为以下四种,优先级别为:

ERROR > WARN > INFO > DEBUG

输出原则为:程序会打印出高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少,即:

设置级别为 ERROR 只会打印出 ERROR 日志;

设置级别为 WARN 会打印出 ERROR 和 WRAN 日志;

设置级别为 INFO 会打印出 ERROR、WARN 和 INFO 日志;

设置为 DEBUG 会打印出所有日志。

本案例中 log4j.rootLogger=DEBUG,Console,File表示输出 DEBUG 以上级别日志。

(2)上面代码中出现的 %m%p%d%c%n……分别代表的含义如下所示:

%m 输出代码中指定的消息 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费的毫秒数 %c 输出所属的类目,通常就是所在类的全名 %t 输出产生该日志事件的线程名 %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 :10:28,921 %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。 %x Used to output the NDC (nested diagnostic context) associated with the thread that generated the logging event %X Used to output the MDC (mapped diagnostic context) associated with the thread that generated the logging event for specified key

(3)如下代码用来设定当文件到达设定大小时产生一个新的文件。

log4j.appender.File=org.apache.log4j.RollingFileAppender

将 RollingFileAppender 换成 DailyRollingFileAppender,则表示每天产生一个日志文件。

(4)可以在下面的代码中设置你的日志文件的存放位置。

log4j.appender.File.File=D/wly/git/dreamland/logs/run.log

spring-mvc.xml 的配置

srping-mvc.xml 为 SpringMVC 核心配置文件,主要包括 Controller 层的包扫描、视图模式配置(跳转路径的前后缀)、文件上传配置、静态资源处理等。

配置代码如下,关键地方均有注释说明:

text/html;charset=UTF-8

配置后会看到有报红,我们创建相对应的包路径和文件夹,注意 css、js、images 在 webapp 路径下。

在 java 目录右键 new -> Package -> wang.dreamland.www.controller。

然后在 webapp 下右键 new -> Directory 分别创建 css、js 和 images 文件夹,如下图:

《SSM 博客系统开发实战》

spring-mybatis.xml 配置

spring-mybatis.xml 为 Spring 和 Mybatis 整合配置文件,主要进行扫描包的配置、数据源的配置、映射文件的配置、事务管理配置等,配置文件中都有注释,这里不再赘述。

配置代码如下:

classpath:jdbc.properties

注意 dao 接口扫描包路径是 wang.dreamland.www.dao,之后配置 dao 时记得别配错路径了,否则会报错。

mybatis-config.xml 配置

mybatis-config.xml 是 MyBatis 的核心配置文件,包括驼峰命名、别名、通用 mapper、分页插件配置等。

配置代码如下,关键地方均有注释说明:

上面代码中,wang.dreamland.www.entity 对应的是实体类包路径,之后新建实体时就放在该路径下:

web.xml 配置

web.xml 为 Web 容器的配置文件,用来初始化配置信息,主要定义了:

  1. Web 应用的名字、描述(display-name 和 description 标签);
  2. 应用范围的初始化参数(context-param 标签);
  3. 过滤器配置(filter 标签);
  4. 监听器配置(listener 标签);
  5. servlet 配置(servlet 标签,如前端控制器和验证码);
  6. 欢迎页面(welcome-file-list 标签,如 index.jsp 页面);
  7. session失效时间(session-config 标签);
  8. 错误页面配置(error-page 标签,如 404、500错误页面等)。

配置代码如下所示:

dreamland-web contextConfigLocation classpath*:spring-mybatis.xml log4jConfigLocation classpath:log4j.properties encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encodingFilter /* org.springframework.web.context.ContextLoaderListener org.springframework.web.util.IntrospectorCleanupListener SpringMVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring-mvc.xml 1 true SpringMVC / default *.xml default *.css index.jsp 15

配置完成后的整体目录结构如下:

《SSM 博客系统开发实战》

添加 Tomcat 服务并启动

添加 Tomcat Server

点击右上角的倒三角 -> Edit Configurations,如下图所示:

《SSM 博客系统开发实战》

接下来的设置请参考下面图示说明:

《SSM 博客系统开发实战》

《SSM 博客系统开发实战》

《SSM 博客系统开发实战》

《SSM 博客系统开发实战》

启动 Tomcat

启动项目后,访问 127.0.0.1:8080 或者 localhost:8080,可以看到页面上出现了熟悉的 “Hello World!”,表示 SSM 框架搭建完成!

《SSM 博客系统开发实战》

配置文件加载顺序

Web 容器加载配置文件顺序

上面,我们把配置文件配置好了,那怎样才能起作用呢?这就需要 Web 容器来加载了。Web 容器加载配置文件的过程如下。

启动 Tomcat 后,Web 容器首先加载 web.xml 文件。

web.xml 文件是创建 Web 项目所需要的配置文件,用来初始化配置信息,主要包含拦截器、过滤器、servlet 等的配置,它的位置在项目 WEB-INF 目录下。

在 web.xml 的 中加载其他 XML 和 log4j.properties 文件,代码如下:

contextConfigLocation classpath*:spring-mybatis.xml, classpath*:applicationContext-redis.xml, classpath*:applicationContext-activemq.xml, log4jConfigLocation classpath:log4j.properties

其中 param-name 的名称是固定格式,param-value 是要加载的配置文件名,多个用逗号隔开,通过 Ctrl+鼠标左键可定位到相应配置文件。

接着,根据 spring-mybatis.xml 中的 PropertiesFactoryBean 加载多个 properties 文件,代码如下:

classpath:jdbc.properties classpath:redis.properties

通过 property 标签内的 list 标签可以加载多个 properties 文件,value 标签内就是具体的 properties 文件的路径,通过 Ctrl+鼠标左键可以定位到相应的文件。

根据 spring-mybatis.xml 的 SqlSessionFactoryBean 加载 mybatis 核心配置文件 mybatis-config.xml 以及其他映射文件

其中 property 标签的 name 值是固定的,通过该属性加载对应的 value 中的值,value 的值是配置文件的路径,通过 Ctrl+鼠标左键可访问该文件。

然后,加载前端控制器 DispatcherServlet 的配置文件 srping-mvc.xml。

SpringMVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring-mvc.xml 1 true SpringMVC /

其中 init-param 标签是前端控制器的初始化参数配置,param-name 参数名为固定值,param-value 参数值为具体的配置文件路径,以此来加载对应的配置文件。

1的正数值越小,启动该 Servlet 的优先级越高。

这样所有的配置文件就加载完毕了!

第03课:MySQL 表结构设计及反向生成实体类
第04课:接口设计及通用 Mapper
第05课:注册(邮件激活、Redis 缓存、Ajax 异步获取)
第06课:登录之账号登录(验证码)
第07课:登录之手机快捷登录(ActiveMQ+阿里大于)
第08课:首页展示及分页(PageHelper)
第09课:评论、回复及点赞模块
第10课:个人主页模块
第11课:博客书写页面——KindEditor 富文本编辑器
第12课:个人资料修改页面
第13课:第三方 QQ 登录及账号绑定与解除
第14课:首页搜索功能(Solr)
第15课:Spring Security 源码解读及账号登录认证授权
第16课:Spring Security 之手机登录认证授权
第17课:Spring Security 之第三方 QQ 登录认证授权
第18课:Linux 系统部署发布
第19课:项目总结

阅读全文: http://gitbook.cn/gitchat/column/5afa86a515da5a21f341cd7f


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 网卡工作原理及网络知识分享
    本文介绍了网卡的工作原理,包括CSMA/CD、ARP欺骗等网络知识。网卡是负责整台计算机的网络通信,没有它,计算机将成为信息孤岛。文章通过一个对话的形式,生动形象地讲述了网卡的工作原理,并介绍了集线器Hub时代的网络构成。对于想学习网络知识的读者来说,本文是一篇不错的参考资料。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
author-avatar
雨含的晴天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有