首页 > 编程知识 正文

博客,框架

时间:2023-05-05 02:51:19 阅读:115099 作者:3562

1、之前写的本博客是个人博客系统系列的第二篇,以下是其他博客的链接。

介绍整个个人博客系统2、创建新项目2.1SpringBoot项目首先创建新的springboot项目。 项目信息大家可以自由填写,但为了开发方便,最好与我的截图一致:

2.2要添加依赖关系,请单击“下一步”并选择依赖关系。 现在,如下所示。

必需选择依赖项: thymeleafspringsecuritymybatisframeworkmysqldriverlombok【此依赖项其实不是必需的,但需要较少的代码】非必需选择依赖项: spring boot dev ttombok

单击“下一步”打开pom.xml文件,直到项目创建完成。 这附近有线程池。 “不追加也可以。 我好像没有在项目中使用,但是可能在后期优化中使用。 ”上的截图中找不到,需要手动添加。

通过创建ependencygroupidcom.Alibaba/groupidartifactiddruid/artifactidversion1.1. 10/version/dependency 2.3多环境配置资源

应用程序. properties应用程序- dev.properties应用程序- test.properties应用程序- prod.properties当然,此类型

其中,application.properties文件的内容如下:

spring.profiles.active=dev表示启用application-dev.properties文件中的开发环境配置,如下所示:

# tomcat端口号server.port=8080#线程池类型,上一个线程池依赖于未添加的朋友。 此代码为spring.data source.type=com.Alibaba.druid.pool.druid data source=com.Alibaba.druid.pool.druidd自替换sprprd useUnicode=true迷你发卡=utf-8 spring.data source.username=root spring.data source.password=123456 # 视图分析spring.MVC .视图mapper.xml文件的位置my batis.mapper-locations=class path : mapper/*.XML # 在控制台上,SQL语句my batis.configuration.log-impl=org.Apache.ibatis.logging.stdout.stdout impl #日志级别logging.level logging.level.com.ala geek.personal blog=debug开发阶段。 我暂时不写测试和生产的配置。 感兴趣的朋友可以尝试复制开发的配置并更改端口号。

3、异常处理项目运行过程中,总会抛出各种异常。 我们期待着捕获和统一处理所有这些例外情况。 另外,在某些情况下,抛出的例外期望是我们定制的例外。 例如,在此自定义在博客中未找到的异常:

/** *在博客中未发现异常*@authoralageek*/@ responsestatus (http status.not _ found ) publicclassblognotfoundexceptionextendsruntion publicblognotfoundexception (} PPP } publicblognotfoundexception (字符串消息,可配置缓存) super (消息,缓存); }访问系统中不存在的博客时,前端将返回404个http错误。 在这里,让你扔博客也找不到例外。 这样可以捕获到全局异常处理,然后跳转到相应的页面进行相应的处理。

在我的博客中没有发现例外,我将演示如何自定义例外。 全局异常处理首先捕获所有异常。 其代码如下。

/** *全局异常处理机制* @author AlaGeek

*/@Slf4j@ControllerAdvicepublic 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@Componentpublic 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鼠标点几下的事情,只是为了后续开发和调试方便,所以要做些相关配置,比如日志处理,比如异常处理。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。