SpringBoot开发一个小而美的个人博客(三) 框架搭建

环境搭建

在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,但后面肯定会好的😁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值