本文上一篇的内容的基础上,加入thymeleaf 模板,实现一个简单的登陆和页面错误提示的功能,借此了解SpringBoot web项目,同时为大家分享一些编码小技巧,用于简化代码。
我们回到第一篇的内容,看一下项目的目录结构,SpringBoot 生成项目时,如果引入了web组件,在resources文件夹下面会生成两个文件夹static 和 templates 。static文件夹默认存放css、js等静态资源,templates文件夹用来存放html等模板页面(有兴趣的同学可以通过配置文件或配置类修改存放路径,在demo中,我们就 使用Spring推荐的默认路径 )。
一、在templates 下,编写一个登陆页面 login.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>登录</title>
<link rel="stylesheet" type="text/css" href="/css/common.css" />
</head>
<body>
<form th:action="@{/login}" method="post">
<div>
<!--/*@thymesVar id="error" type=""*/-->
<span id="basic-addon0"> </span>
<span style="font-size: 12px;color: red" th:text="${error}" aria-describedby="basic-addon0"></span>
<br />
</div>
<div>
<span id="basic-addon1">@</span>
<input id="user_name" name="userName" type="text" placeholder="用户名" aria-describedby="basic-addon1" />
</div>
<br />
<div>
<span id="basic-addon2">@</span>
<input id="password" name="password" type="password" placeholder="密码" aria-describedby="basic-addon2" />
</div>
<br />
<button type="submit" style="width:190px;">登 录</button>
</form>
</body>
</html>
我们只要在标签中加入 xmlns:th=”http://www.thymeleaf.org” , 启用thymeleaf模板。
关于thymeleaf 的语法我们后面另起篇幅进行分享。
二、编写LoginController控制器
package cn.pw.pf.web.controller;
import cn.pw.pf.web.requestParam.UserVo;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import javax.validation.Valid;
/**
* 页面登陆控制器
* @Description:
* @Author:libin
* @Date: Created in 15:28 2017/11/13
*/
@RestController
@RequestMapping("/")
public class LoginController {
@GetMapping("/login")
public ModelAndView login(ModelAndView modelAndView){
modelAndView.setViewName("login");
return modelAndView;
}
@PostMapping("/login")
public ModelAndView login(ModelAndView modelAndView, @Valid UserVo userVo, BindingResult bindingResult){
if(bindingResult.hasErrors()){
modelAndView.addObject("error",bindingResult.getFieldError().getDefaultMessage());
modelAndView.setViewName("login");
return modelAndView;
}
String userName = userVo.getUserName();
String password = userVo.getPassword();
if(!"admin".equals(userName)){
modelAndView.addObject("error","无此用户!");
modelAndView.setViewName("login");
return modelAndView;
}
if(!"123456".equals(password)){
modelAndView.addObject("error","密码错误!");
modelAndView.setViewName("login");
return modelAndView;
}
modelAndView.addObject("userName",userName);
modelAndView.setViewName("index");
return modelAndView;
}
}
login 的get请求用于页面跳转,post请求用于处理登陆验证。
这里我使用了@Valid 和 BindingResult 实现页面参数验证。
三、编写 UserVo类,用于bind页面请求参数。同样,我们创建一个新包,requestParam,存放UserVo。
package cn.pw.pf.web.requestParam;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Size;
/**
* 页面请求参数对应实体
* @Description:
* @Author:libin
* @Date: Created in 15:34 2017/11/13
*/
public class UserVo {
private Long id;
@NotEmpty(message="用户名不能为空!")
private String userName;
private String nickName;
@Size(min=6,max=10,message = "密码长度必须6到10位")
private String password;
private Integer age;
private Integer sex;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
OK,代码编写完毕,我们测试一下。
1、启动项目,打开 http://localhost:8680/login
2、在不输入用户名密码的情况下,点击登录
3、输入用户名 admin 不输入密码,点击登录
4、输入完整的用户名密码,用户名:adimn 密码:123456
总结:截止目前,很简单的一个 SpringBoot web项目 ,内容很简单,代码极少,全程没有一个xml。下一篇我们分享SpringBoot web 配置Filter过滤器。