环境搭建
在idea中新建一个SpringBoot项目,添加web 、themeleaf 、JPA、Mysql、DevTools这些依赖。
配置文件:
将生产环境和开发环境分开,application.yml用来配置themeleaf和选择用那个环境。
application-dev.yml和application-pro.yml只有端口号不同,其他都一样。这里我们用开发环境
然后用切面实现日志功能,方便排错的时候快速定位。
/**
*
* @className LogAespect
* @author pengcj
* @date 2021/12/23 16:45
*/
@Aspect //切面
@Component
public class LogAspect {
private final Logger logger= LoggerFactory.getLogger(this.getClass());
@Pointcut("execution(* com.pcj.blog.web.*.*(..) )") //切点 后面是使用的范围
public void log(){ }
@Before("log()")
public void doBefore(JoinPoint joinPoint){
ServletRequestAttributes attributes= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
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 log=new
RequestLog(url,ip,classMethod,args);
logger.info("Request : {}",log);
}
@After("log()")
public void doAfter(){
// logger.info("*****doAfter****");
}
@AfterReturning(returning = "o",pointcut = "log()") //捕捉方法返回的内容
public void doAfterReturn(Object o){
logger.info("result : {}",o);
}
//内部类
private class RequestLog{
private String url;
private String ip;
private String classMethod;
private Object [] args;
public RequestLog(String url, String ip, String classMethod, Object [] args) {
this.url = url;
this.ip = ip;
this.classMethod = classMethod;
this.args = args;
}
@Override
public String toString() {
return "RequestLog{" +
"url='" + url + '\'' +
", ip='" + ip + '\'' +
", classMethod='" + classMethod + '\'' +
", args=" + args +
'}';
}
}
}
那个内部类可以放到外面单独定义一个。
异常处理
定义错误页面
404、500、error...
全局异常处理
@ControllerAdvice 配合 @ExceptionHandler 实现全局异常处理
@ControllerAdvice
public class ControllerException {
private Logger logger= LoggerFactory.getLogger(this.getClass());
@ExceptionHandler(Exception.class)//标识这个方法可以做异常处理 表示拦截的信息是Exception级别的都可以
public ModelAndView exceptionhandler(HttpServletRequest request,Exception e) throws Exception {
logger.error("Request Url : {},Exception : {}",request.getRequestURL(),e); //记录异常信息
if(AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class)!=null){
throw e;
}
ModelAndView mv=new ModelAndView();
mv.addObject("url",request.getRequestURL());
mv.addObject("Exception",e);
mv.setViewName("error/error"); //返回页面
return mv;
}
}
页面处理
导入静态页面
将之前的静态页面放到templates文件夹下面。其他的css、js文件放到static目录下面。
这时候直接打开页面是正常的
但是通过请求打开就会样式错误,因为css文件没有导入进来 。
因为使用了thymeleaf模板引擎。
第一种方法是直接通过 th:href="@{}"、th:src="@{}"这种语法绑定。
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<link rel="stylesheet" href="../static/css/my.css" th:href="@{/css/my.css}">
第二种方法是使用fragment。
首先新建一个html文件,然后将公共的部分放进去,css、js都可以放进去,按themeleaf的语法进行绑定。
然后那里要用到就通过语法添加
只是还是会有少部分内容需要自己加th:href="@{}"、th:src="@{}"
注意:css文件用的是th:href="@{}",图片和js文件是th:src="@{}",今天没注意到都用的th:href="@{}",弄了好久才发现😭
错误页面显示调整
也是利用fragment 只需要头部和底部就可以了
明天就开始写后端的代码了,冲冲冲冲冲冲😁
挂一个大佬的博客地址吧,一定要进去看看首页-ONESTARの客栈
大佬的b站也有演示 Springboot搭建个人博客_哔哩哔哩_bilibili
SpringBoot开发一个小而美的个人博客(一) 前端页面(一)_舒克、舒克的博客-CSDN博客
SpringBoot开发一个小而美的个人博客(二) 前端页面(二)_舒克、舒克的博客-CSDN博客
感觉我写的文章就是记流水帐hhh,但后面肯定会好的😁