今天是2018年3月16日,SSM框架学了有一段时间了,但一直没有自己独立完成一个项目,自己对SSM的理解也仅仅停留在会简单使用的层次上。很多概念只有在实际操作中才会清晰,所以想从个人网站的搭建开始,慢慢从使用SSM走向了解到最后深入底层实现。在SSM框架、SpringBoot等Java框架之外,后端开发还有一众优良的实践:缓存、分布式、集群等,囿于现在水平的限制,也为了体现从简到繁这个主题,我会在以后代码重构的过程中,一步步学习使用这些工具,使用上这些技术。每次大版本的迭代,我都会把代码上传到Github,项目搭建的全过程也会记录在此。
项目概述
本项目是一个基于Java SSM框架开发的单用户个人博客系统,具有博客发表、修改、评论、后台管理等功能。项目分为前台和后台,前台负责展示业务,前后端适当分离;后台需要登录,负责文章、评论增删查改业务。
开发环境搭建
1、开发工具
2、新建项目
4.0.0
com.vansl
myblog
war
1.0-SNAPSHOT
myblog
http://maven.apache.org
4.12
1.7.21
5.1.35
3.1.0
2.2
1.2
4.3.3.RELEASE
1.5.4
3.4.0
1.3.0
1.4
4.0.0
UTF-8
junit
junit
${junit.version}
test
org.slf4j
slf4j-log4j12
${slf4j.version}
mysql
mysql-connector-java
${mysql.driver.version}
javax.servlet
javax.servlet-api
${servlet.version}
javax.servlet.jsp
jsp-api
${jsp.version}
jstl
jstl
${jstl.version}
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-aop
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-test
${spring.version}
aspectj
aspectjweaver
${aspect.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
${mybatis.spring.version}
commons-dbcp
commons-dbcp
${commons-dbcp.version}
com.github.pagehelper
pagehelper
${pagehelper.version}
commons-fileupload
commons-fileupload
1.3.3
com.fasterxml.jackson.core
jackson-databind
2.9.4
com.fasterxml.jackson.core
jackson-core
2.9.4
com.fasterxml.jackson.core
jackson-annotations
2.9.4
com.alibaba
fastjson
1.2.47
org.apache.commons
commons-lang3
3.4
commons-io
commons-io
2.4
commons-codec
commons-codec
1.10
org.json
json
20160212
org.apache.tomcat.maven
tomcat8-maven-plugin
80
/
src/main/java
**/*.xml
index.html
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:spring/applicationContext-*.xml
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
forceEncoding
true
CharacterEncodingFilter
/*
org.springframework.web.util.Log4jConfigListener
log4jConfigLocation
classpath:config/log4j.properties
SpringMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/spring-mvc.xml
1
true
SpringMVC
/
applicationContext-dao.xml:
SqlMapConfig.xml:
数据库和日志配置文件这里不再给出。
接着配置tomcat服务器,点击运行,项目成功运行,此时浏览器显示404。接下来在controller包下新建HomeController.java,并在views下新建index.jsp:
package com.vansl.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
/**
* @author: vansl
* @create: 18-3-17 下午11:58
*/
@Controller
public class HomeController {
//添加日志器
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
//action映射
@RequestMapping("/index")
public String index(HttpServletRequest request){
//输出日志文件
logger.info("Build Success");
//返回index.jsp
return "index";
}
}
重启tomcat,访问http://localhost:8080/index,如果出现index.jsp,那么说明开发环境搭建成功了(另外在有欢迎页的时候输入http://localhost:8080也能访问index.jsp,原因不明,有待解释:点击打开链接)。
数据库设计
初步设计了四张表以实现基本的登录、发表博客、评论以及管理功能。如下所示:
虽然是单用户的个人博客系统,但我还是设计了user这张表,并添加了用户角色字段进行用户权限管理。一是为了增加开发的完整度、复杂度,其次也可以方便拓展成多用户的系统。由此建表:
/**
* @DATE 20:47 2018/3/21
*/
--
-- 数据库: `myblog`
--
--
-- 用户表
--
CREATE TABLE `user` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`username` VARCHAR(30) NOT NULL COMMENT '用户名',
`password` VARCHAR(30) NOT NULL COMMENT '用户密码',
`role` VARCHAR(20) DEFAULT 'user' COMMENT '用户权限',
UNIQUE (`username`),
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
--
-- 博客表
--
CREATE TABLE `blog` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '博客ID',
`title` VARCHAR(90) NOT NULL COMMENT '博客标题',
`time` DATE NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发表时间',
`content` TEXT NOT NULL COMMENT '博客正文(包含html格式)',
`text` TEXT NOT NULL COMMENT '博客正文(纯文本)',
`pv` int NOT NULL COMMENT '博客点击量',
`publish` INT(1) NOT NULL COMMENT '是否已发表,0已发表,1未发表(在草稿箱)',
`user_id` INT NOT NULL COMMENT '用户ID',
`type_id` INT NOT NULL COMMENT '分类ID',
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
--
-- 博客分类表
--
CREATE TABLE `blog_type` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '分类ID',
`type_name` VARCHAR(30) NOT NULL COMMENT '分类名称',
`parent_id` INT NOT NULL COMMENT '父分类id',
`user_id` INT NOT NULL COMMENT '用户ID',
UNIQUE (`type_name`,`parent_id`),
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
--
-- 评论表
--
CREATE TABLE `blog_comment` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '评论ID',
`time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发表时间',
`name` VARCHAR(30) NOT NULL COMMENT '评论者',
`contact` VARCHAR(90) NOT NULL COMMENT '联系方式',
`ip` VARCHAR(15) NOT NULL COMMENT '评论者ip',
`address` TINYTEXT NOT NULL COMMENT '评论者地址',
`content` TEXT NOT NULL COMMENT '评论内容',
`blog_id` INT NOT NULL COMMENT '博客ID',
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
把sql文件导入数据库:
执行成功。至此开发环境搭建和数据库表设计部分的工作就完成了。
参考
https://www.cnblogs.com/Sinte-Beuve/p/5730553.html