搭建可以访问数据库的SpringWeb项目 二

摘要:

该文为需要搭建SpringWeb项目学习的同学提供参考,其中会包括以下功能
1.使用Idea搭建SpringWeb项目初始环境
2.加入访问Html页面和静态资源
3.返回动态的Html页面处理
4.断言异常拦截处理以及自定义增加请求参数
5.引入logback日志记录(日志记录形式后期会有优化,具体优化会再贴一个模块)
6.数据库查询配置文件准备以及查询实现

git下载地址:点我下载

因为一篇文章会显得文章比较长,所以进行拆分讲解

3.返回动态的Html页面处理

3.1新增VO

在这里插入图片描述

public class Welcome {
    private Long id;
    private String name;
    private Integer age;
    private String gender;
    .
    .
    .
3.2新增welcomeIndex返回hello中的变量

在这里插入图片描述

@RequestMapping("welcomeIndex")
    public String welcomeIndex(Model model){
        Welcome people = new Welcome();
        people.setId(1L);
        people.setName("Tom");
        people.setAge(20);
        model.addAttribute("singlePerson",people);
        return "hello";
    }
3.3修改hello.html的展示内容如下

在这里插入图片描述

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../static/hello/libs/hello.js"></script>
</head>
<body>
<!--您好-->
您好,
<div class="panel-primary">
    <span th:text="${singlePerson.name}"></span>
</div>
</body>
</html>
3.4启动ProjectApplication访问页面

http://localhost:10001/welcome/welcomeIndex
在这里插入图片描述

3.5总结

可以看出html页面已经动态返回了Tom字符创,该文字是我们在代码中动态定义,目前只是写死的,到后期我们可以让该数据可以从数据库查询出来,而这种展示逻辑和jsp是一样的,只是这种html的动态展示逻辑更加灵活,其中${singlePerson.name}即Thymeleaf会自动从welcomeIndex方法中定义的 model.addAttribute(“singlePerson”,people)中取值填充后在返回给浏览器

以上知识点完成之后的项目目录
在这里插入图片描述
该模块提交记录
在这里插入图片描述

4.断言异常拦截处理以及自定义增加请求参数

4.1断言异常拦截处理
4.1.1新增全局异常断言处理类ExceptionHandlerAdvice

新增全局异常处理方法exception,其中@ExceptionHandler(value = Exception.class)代表拦截所有Exception,展示Error页面
在这里插入图片描述

 //拦截所有Exception,展示Error页面
    @ExceptionHandler(value = Exception.class)
    public String exception(Exception exception, WebRequest webRequest,Model model){
        model.addAttribute("erroMessage",exception.getMessage());
        return   "error";
    }
4.1.2新增error.html页面

在这里插入图片描述

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
请求出现问题啦!
<div class="panel-primary">
    <span th:text="${erroMessage}"></span>
</div>
</body>
</html>
4.1.3编写方法抛出异常,查看异常拦截效果

在这里插入图片描述

/**
     * 模拟请求接口报错
     * @return
     */
    @RequestMapping("getError")
    @ResponseBody
    public List<Welcome> getError(){
        /**
         * 测试数据
         */
        List<Welcome> welcomes = new ArrayList<>();
        Welcome w1 = new Welcome();
        w1.setId(1L);
        w1.setName("xx1");
        w1.setAge(11);
        w1.setGender("女");
        throw new IllegalArgumentException("抱歉,访问链接有误!");
//        return welcomes;
    }
4.1.4启动ProjectApplication访问页面

http://localhost:10001/welcome/getError
在这里插入图片描述

4.1.5总结

可以看出,浏览器返回的error.html中的error信息已经动态替换我们抛出异常中的内容.作为一个全局的异常拦截处理方法,不仅可以拦截信息,只展示想给用户展示的内容同样的,在这个方法中也可以异步的进行日志的写表,方便以后日志的查找以及异常的定位

4.2自定义增加请求参数
4.2.1新增方法 将额外键值添加到所有全局请求参数中

在这里插入图片描述

//将额外键值添加到所有全局请求参数中
@ModelAttribute
public void addAttribute(Model model){
    model.addAttribute("msg","额外信息");
}
4.2.2新增方法 模拟请求带断言参数接口

在这里插入图片描述

/**
     * 模拟请求带断言参数接口
     * @return
     */
    @RequestMapping(value = "getAdvicePost",method = RequestMethod.POST)
    @ResponseBody
    public Welcome getAdvicePost(@ModelAttribute("msg") String msg, @RequestBody Welcome w1){
        w1.setName(msg+w1.getName());
        return w1;
    }
4.2.3启动ProjectApplication访问页面

因为我们定义的是POST请求,所以模拟调用我们选择使用postMan来实现
调用地址:http://localhost:10001/welcome/getAdvicePost
调用参数:
{
“id”:1,
“name”:“Tom”
}
在这里插入图片描述
调用返回的结果:
在这里插入图片描述

4.2.4总结

从以上调用返回的结果可以看出,其中name在我们输入的Tom的基础上加上了[额外信息]几个字,可以看出模拟请求带断言参数接口已经生效,而这个属性有什么用呢,如果多个请求接口都需要查询额外的同样的信息,那么可以再断言中做统一处理,然后在方法中单独加入@ModelAttribute(“msg”) String msg即为在ExceptionHandlerAdvice类中addAttribute方法定义的唯一值Key就可以了

最后附上ExceptionHandlerAdvice类的完整代码

package com.mon.project.advice;

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.context.request.WebRequest;

@ControllerAdvice
public class ExceptionHandlerAdvice {

    //拦截所有Exception,展示Error页面
    @ExceptionHandler(value = Exception.class)
    public String exception(Exception exception, WebRequest webRequest,Model model){
        model.addAttribute("erroMessage",exception.getMessage());
        return   "error";
    }

    //将额外键值添加到所有全局请求参数中
    @ModelAttribute
    public void addAttribute(Model model){
        model.addAttribute("msg","额外信息");
    }

    //忽略请求中的id参数
//    @InitBinder
//    public void initBinder(WebDataBinder webDataBinder){
//        webDataBinder.setDisallowedFields("id");
//    }


}

以上知识点完成时的目录结构
在这里插入图片描述
git提交记录
在这里插入图片描述
因为一篇文章写完会太长,所以分为四篇文章进行拆分,其他知识点请看
1.使用Idea搭建SpringWeb项目初始环境
2.加入访问Html页面和静态资源
3.返回动态的Html页面处理
4.断言异常拦截处理以及自定义增加请求参数
5.引入logback日志记录(日志记录形式后期会有优化,具体优化会再贴一个模块)
6.数据库查询配置文件准备以及查询实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值