发表于: 2018-10-19 19:59:32
1 412
一、今天完成的事情
1. 把注册账号加上了校验规则
使用Validation校验参数,账号为邮箱格式,密码6到21位
public class Usr{
private Long id;
@Email(message = "账号应该为邮箱格式")
private String name;
@Length(min = 6, max = 21, message = "密码长度有误")
private String pwd;
校验要注册账号的有效性,账号是否重复,是否符合校验规则
@RequestMapping(value = "/signup", method = RequestMethod.POST)
public String signup(RedirectAttributes model, @Valid Usr usr, BindingResult error) {
if(usrService.hasUsrName(usr.getName())) {
model.addFlashAttribute("msg","账号已存在");
return "redirect:signupPage";
}
if(error.hasErrors()){
String msg = Objects.requireNonNull(error.getFieldError()).getDefaultMessage();
model.addFlashAttribute("msg",msg);
return "redirect:signupPage";
}
usrService.insert(usr);
return "redirect:loginPage";
}
2.把添加删除Cookie写成一个工具类
public class CookieUtil {
public static Cookie addCookie(String key, String value){
Cookie cookie = new Cookie(key,value);
cookie.setMaxAge(10*60);
cookie.setPath("/");
return cookie;
}
public static Cookie killCookie(String key){
Cookie cookie = new Cookie(key, null);
cookie.setMaxAge(0);
cookie.setPath("/");
return cookie;
}
}
这样在Service中签发token的方法就可以直接调用工具类
@Override
public Cookie setToken(String name) {
Long currentTime = System.currentTimeMillis();
Date expiration = new Date(currentTime + 600*1000);
Map<String, Object> payload = new HashMap<>(1);
payload.put("usrName", name);
String jwt = JJWTUtil.sign(payload,expiration,"abcd");
return CookieUtil.addCookie("token",jwt);
}
退出登录时删除token
@GetMapping(value = "/logout")
public String logout(HttpServletResponse response) {
response.addCookie(CookieUtil.killCookie("token"));
return "redirect:loginPage";
}
3. 重新学习了一下SoringMVC的原理,把SpringMVC处理一个请求的流程简单说一下
SpringMVC的核心是DispatcherServlet,它的所有功能都是通过DispatcherServlet串联起来的,DispatcherServlet是什么?servlet又是什么?
servlet是一个拥有五个方法的接口,它定义了一套处理网络请求的规范,所有实现处理网络请求的类都要实现这个接口,实现接口中的方法,包括初始化、接收请求、销毁时要实现什么功能。
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
因为Servlet没有Main方法,它不能独立地执行,必须要部署到Servlet容器中由容器来实例化和调用Servlet的方法。Web服务器接收到请求后将请求交给Servlet容器,容器实例化Servlet,servlet处理请求,产生响应,这个响应由Servlet容器返回给Web服务器。
DispatcherServlet实现了Servlet接口,它是SpringMVC用于处理请求的servlet,如果接收的请求和在web.xml中指定的映射路径匹配,servlet容器将请求转交给DispatcherServlet处理。
DispatcherServlet接收到请求后,通过HandlerMapping接口的实现来映射url请求到相应的处理类(Controller),Controller处理完请求之后将ModelAndView对象交还给DispatcherServlet。
DispatcherServlet借由视图解析器将结果渲染给客户端。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
二、明天计划的事情
整理任务5的代码,深入研究一下打印日志的正确姿势
三、遇到的问题
Util中的方法用static来修饰,为什么service不用static来修饰,而是要注入后调用?每个service也只有一个实例,既然这样把DAO和service中的方法都改成静态的不是更好吗?
四、收获
SpringMVC处理请求流程,servlet是什么
评论