摘要:
该文为需要搭建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.数据库查询配置文件准备以及查询实现