发表于: 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是什么



返回列表 返回列表
评论

    分享到