个人博客系统之框架搭建(代码片段)

AlaGeek AlaGeek     2022-12-12     766

关键词:

1、写在前面

本篇博客是个人博客系统系列第二篇,以下是其他博客的链接:

2、新建项目

2.1 创建SpringBoot项目

首先新建一个SpringBoot项目,项目信息大家可以随便填,不过为了开发方便,最好跟我的截图保持一致:

2.2 添加依赖

点击下一步后选择依赖,其中:

  • 必选依赖:
    • Thymeleaf
    • Spring Security
    • MyBatis Framework
    • MySQL Driver
    • Lombok【这个依赖其实也非必选,不过加了可以少写很多代码】
  • 非必选依赖:
    • Spring Boot DevTools【这个依赖用于热部署,可以不重启服务器部署项目,不过我没咋用,可以不加】


一直点击下一步,直到项目创建完成,打开pom.xml文件,这里边有个线程池依赖(可以不加,我貌似没在项目上用到,不过后期优化可能会用到)在上边的截图中找不到,因此需要手动添加下:

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.1.10</version>
</dependency>

2.3 创建多环境配置

在resources文件夹下创建一下四个文件:

  • application.properties
  • application-dev.properties
  • application-test.properties
  • application-prod.properties

当然我们这个项目用不到这么多配置,嫌麻烦的朋友也可以只创建第一个文件,我这边只是想尽量靠近企业开发。
其中application.properties文件内容如下:

spring.profiles.active=dev

表示启用开发环境的配置,开发环境配置在application-dev.properties文件中,内容如下:

# tomcat端口号
server.port=8080

# 线程池类型,前面线程池依赖没加的朋友,可以把这行代码去掉
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 数据库配置,自行替换
spring.datasource.url=jdbc:mysql://192.168.203.128:3306/personal_blog?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456

# 视图解析
spring.mvc.view.suffix=.html

# mapper.xml文件位置
mybatis.mapper-locations=classpath:mapper/*.xml
# 在控制台打印SQL语句
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

# 日志级别
logging.level.root=info
# 因为是开发环境的配置,所以配置为debug,在开发测试环境中,可以相应的提高日志级别
logging.level.com.alageek.personalblog=debug

开发阶段,测试和生产的配置暂且不写,有兴趣的朋友可以复制开发的配置,修改下端口号试试。

3、异常处理

项目运行过程中肯定会有各种各样的异常抛出,我们期望将这些异常全部捕获,进行统一处理,并且在某些情况下,我们也期望抛出来的异常是我们自定义的异常,比如这里我们自定义一个博客未找到的异常:

/**
 * 博客未找到异常
 * @author AlaGeek
 */
@ResponseStatus(HttpStatus.NOT_FOUND)
public class BlogNotFoundException extends RuntimeException 

    private static final long serialVersionUID = 3780352823465733637L;

    public BlogNotFoundException() 
    

    public BlogNotFoundException(String message) 
        super(message);
    

    public BlogNotFoundException(String message, Throwable cause) 
        super(message, cause);
    

当我们访问系统中不存在的博客时,将会返回一个404的http错误到前端,这里我们让其抛出博客未找到异常,从而能被我们的全局异常处理捕获,以便跳转到相应页面并做相应处理。
这边博客未找到异常只是做个演示,让大家明白下怎么自定义异常,在全局异常处理中我们还是先将所有异常都捕获,其代码如下:

/**
 * 全局异常处理机制
 * @author AlaGeek
 */
@Slf4j
@ControllerAdvice
public class ControllerExceptionHandler 

    /**
     * 异常处理
     * @param e       异常对象
     * @param request 请求对象
     * @return 返回错误页面
     */
    @ExceptionHandler(value = Exception.class)
    public ModelAndView resolveException(Exception e, HttpServletRequest request) throws Exception 
        log.debug("Request URL: , Exception: ", request.getRequestURL(), e);
        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) 
            throw e;
        
        String viewName = "error/error";
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject(BlogConstant.ATTR_NAME_URL, request.getRequestURL());
        modelAndView.addObject(BlogConstant.ATTR_NAME_EXCEPTION, e);
        modelAndView.setViewName(viewName);
        return modelAndView;
    


之前在尚筹网项目中有用到这个异常处理机制,如果不懂这个可以看看我的这篇博客:admin-component异常处理机制
上方代码表示异常被捕获后,将会跳转到error目录下的error.html页面【.html是前面配置的视图解析】,因此需要在resources/template目录下新建error文件夹,并在该文件夹下创建error.html文件,error.html页面长什么样无关紧要,不过需要在其中插入以下代码:

<!--/*/
<div th:utext="'&lt;!--'" th:remove="tag"></div>
<div th:utext="'Failed Request URL:' + $url" th:remove="tag"></div>
<div th:utext="'Exception Message:' + $exception.message" th:remove="tag"></div>
<ul th:remove="tag">
    <li th:each="st: $exception.stackTrace" th:remove="tag"><span th:utext="$st" th:remove="tag"></span></li>
</ul>
<div th:utext="'--&gt;'" th:remove="tag"></div>
/*/-->

代码运用了thymeleaf模板,用于获取异常的具体信息,并且将这段异常信息放在页面的源码注释中,而不是展示在前端页面供用户查看,这样做的目的主要也是为了调试方便,开发的时候可以随时看控制台信息,不过测试环境或者生产环境,如果直接看源码就能看到异常信息的话,想必是非常方便的。

4、日志处理

有了异常处理,还想做的就是每次用户访问我这个博客系统的时候,就把这次访问的相关信息记下来,打印出日志。
对于访问日志,我希望能够记录以下信息:

  • 请求url
  • 请求ip
  • 请求方法
  • 请求参数
  • 返回内容

我们不可能在每个controller的函数里都加上记录日志的代码,那样太麻烦了,因此需要用到spring框架的绝技——AOP,也就是面向切面编程。
首先引入AOP相关的依赖,在pom.xml中添加如下代码:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

然后新增一个日志记录类LogAspect,代码如下:

@Slf4j
@Aspect
@Component
public class LogAspect 

    @Pointcut("execution(* com.alageek.personalblog.web.*.*(..))")
    public void log() 

    

    @Before("log()")
    public void doBefore(JoinPoint joinPoint) 
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (attributes != null) 
            HttpServletRequest request = attributes.getRequest();
            String url = request.getRequestURL().toString();
            String ip = request.getRemoteAddr();
            String classMethod = joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName();
            Object[] args = joinPoint.getArgs();
            RequestLog requestLog = new RequestLog(url, ip, classMethod, args);
            log.info("Request: ", requestLog);
        
    

    @AfterReturning(returning = "result", pointcut = "log()")
    public void doAfterReturn(Object result) 
        log.info("Result: ", result);
    

    @Data
    @AllArgsConstructor
    private static class RequestLog 
        private String url;
        private String ip;
        private String classMethod;
        private Object[] args;
    


5、写在后面

这部分为框架搭建,其实新建一个项目没有这么麻烦,idea鼠标点几下的事情,只是为了后续开发和调试方便,所以要做些相关配置,比如日志处理,比如异常处理。

个人博客开发之需求分析(代码片段)

前言回首过往从入行开发作为一个程序员,我就想要一个自己的blog了,我是一个比较爱折腾的人,刚开始了解到时候是使用第三方建站blog系统,如,WordPress,Typecho,等来搭建自己博客,然后我开始购买阿里云服务器,注册域名,... 查看详情

hexo+github搭建个人博客之创建仓库(代码片段)

...者🎁社区地址:https://bbs.csdn.net/forums/JingYu🎁个人博客地址:http://JingYu1205.github.io个人博客搭建是基于hexo+ 查看详情

django框架之bbs项目之个人博客页面(代码片段)

...  上一步实现了博客园的页面展示,今天我们实现个人博客页面的展示当我们进入个人的博客园的时候,我们想让url上会拼接个人的名字:http://127.0.0.1:8000 查看详情

pythondjango搭建个人博客系统简单记录(代码片段)

其实,这个是大三的时候python学习之后做的一个demo,当时记录下来了,如今翻看的时候,想着把它搬到我的博客上,就当个记录吧,电脑里的东西,总有一天可能会丢失。前言:Django是一个由Python编写... 查看详情

web开发docker+halo搭建个人博客(代码片段)

...腾讯云云服务器,想来闲着不如用它来试试搭建一个个人博客主页,博客框架我选用halo。腾讯云配置腾讯云服务器配置账号密码等步骤不必多说,系统我选用的UbuntuServer20.04LTS64位这个系统,配置完成后使用FinalShe... 查看详情

从零开始搭建solo个人博客系统(代码片段)

...ssl证书(可选)6.1证书选购6.2配置nginx配置文件后记自己个人博客系统从搭建运行至今已然过去一月,整个搭建过程可以说是踩坑无数。因此将整个搭建过程以及踩过的坑写到此处,希 查看详情

django搭建个人博客系列:环境准备及简单的博客系统搭建(代码片段)

之前的Linux环境准备工作,可以参考我之前的博客在Win10下利用VMware安装Ubuntu20.04教程。下面开始构建虚拟环境,以后写多个项目防止污染其他项目环境。1.创建虚拟环境#安装Pythonvenv库sudoapt-getinstallpython3-venv#创建虚拟环境mkdirenvcd... 查看详情

《全栈营销之如何制作个人博客》之二:php环境安装及个人博客后台搭建让你的博客跑起来

上一节我们讲了个人博客用什么开发语言,用什么CMS系统,从这一节我们就开始真正的干货,这一节我们讨论一下PHP环境的安装,及个人博客后台的搭建,让你的博客在正常的PHP环境中运行起来,你就可以进行后台的数据管理,... 查看详情

从0开始搭建个人博客网站(代码片段)

...点时间,参照羊哥的视频手把手教你从0开始搭建自己的个人博客|无坑版视频教程|hexo和各路大神的教程,搭建了自己的博客网站https://trace001.gitee.io在这里分阶段记录一下搭建的整个过程介绍一下搭建环境搭建环境是window10,博客... 查看详情

hexo+github个人博客搭建(代码片段)

首先要了解一下我们搭建博客要用到的框架。Hexo是高效的静态站点生成框架,它基于Node.js。通过Hexo,你可以直接使用Markdown语法来撰写博客。相信很多小伙伴写工程都写过README.md文件吧,对,就是这个格式的!写完后只需两三... 查看详情

个人博客搭建(代码片段)

content1.环境准备NodeJS和NPM的安装切换到root用户模式下安装CNPM安装HEXO框架建立blog文件夹2.初始化博客初始化启动博客3.新建一篇博客4.将博客部署到远端在GitHub新建一个仓库在博客目录下安装git部署插件对_config.yml文件进行设置部... 查看详情

个人的博客搭建(持续更新)(代码片段)

最近的CSDN的博客阅读体验非常的糟糕,恰好自己也一直想搭建一个属于自己的网站,放下自己的技术心得情感体会,从零开始慢慢搭建项目磨练技术,以后也把自己新习得的技术放在里面增加自己的学习乐趣。一,搭建基本的... 查看详情

github+hexo搭建个人博客(代码片段)

GitHub+Hexo搭建个人博客一、写在前面这篇文章主要介绍了,在Ubuntu14.04系统上通过GitHub+Hexo搭建个人博客,网上已经有比较多的关于这方面的文章,这里把自己在实际搭建过程的步骤记录下来,以便以后查询... 查看详情

用halo在自己服务器搭建一个个人博客(代码片段)

本文主要讲解一下如何从零基础到搭建出一个个人的博客在讲解之前,我先说明一下相关的东西。1.Halo简介Halo是一款现代化的个人独立博客系统,给习惯写博客的同学多一个选择。Halo[?he?lo?],意为光环。当然,你也可以当成拼... 查看详情

hexo+github搭建个人博客前期安装部署(代码片段)

...制,关键词限制、广告限制等等。其实搭建一个自己个人博客也是非常好的选择,相对来说比较自由。自己购买域名和服务器的话,搭建成本相对较高,而且还需要定期维护,显然对我们个人来说不是很合适... 查看详情

hexo+github搭建个人博客前期安装部署(代码片段)

...制,关键词限制、广告限制等等。其实搭建一个自己个人博客也是非常好的选择,相对来说比较自由。自己购买域名和服务器的话,搭建成本相对较高,而且还需要定期维护,显然对我们个人来说不是很合适... 查看详情

亲测hexo+github个人博客搭建(代码片段)

什么是Hexo?Hexo是一个快速、简洁且高效的博客框架。Hexo使用Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。安装Hexo相当简单然而在安装前,您必须检查电脑中是否已安装下列应用程序:Nod... 查看详情

01springboot+security+vue个人博客系统之项目创建(代码片段)

整体项目结构更改后的目录结构为配置pom.xml文件添加依赖<!--security--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></depend 查看详情