发表于: 2017-08-28 21:46:07

1 945


一.今天完成的事情

1.将短信验证功能集成到系统中,并且完成通过spring配置文件设置账号密码

首先是页面:

接着是前端页面代码

前端页面代码(这是从网上找了一个前端代码的例子,然后修改了一下)

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<html>

<body>

欢迎您注册...

<div float="left">

<div>

<form id="validateForm"

action="${pageContext.request.contextPath}/registration"

onsubmit="return checkUser();" method="post">

<input type="hidden" name="user" value="${user}" />

<div>

<c:set var="info" value="${info }" />

<c:out value="${info }" />

</div>

<div>

用户名: <input id="username" type="text" name="username"

value="${user.username }"  width="100"/>

</div>

<div>

密码: <input id="password" type="password" name="password"

value="${user.password }"  width="100"/>

</div>

<div>

确认密码: <input id="repassword" type="password" name="repassword"

value=""  width="100"/>

</div>

<div>

邮箱: <input id="email" type="text" name="email"

value="${user.email }"  width="100"/>

</div>

<div>

手机号: <input id="phone" type="text" name="phoneNumber"

value="${user.phoneNumber }" maxlength="11"  width="100"/>

</div>

<div>

验证码: <input id="code" type="text" name="codeNumber" value="${codeNumber }"

maxlength="6"  width="100"/>

<button id="validationCode" type="button" onclick="sendCode(this);"

title="获取验证码">获取验证码</button>

</div>

<div>

<input type="submit" value="注册" />

</div>

</form>

</div>

</div>

</body>

</html>

<script type="text/javascript">

function sendCode(obj) {

var phone = document.getElementById("phone");

var value = phone.value.trim();

if (value && value.length == 11) {

$.ajax({

cache : false,

url : "/SMS",

data : {phoneNumber : value}

});

// 1分钟内禁止点击  

for (var i = 1; i <= 60; i++) {

// 1秒后显示  

window.setTimeout("updateTime(" + (60 - i) + ")", i * 1000);

}

} else {

alert("请输入正确的手机号码");

phone.focus();

}

}

function updateTime(i) {

// setTimeout传多个参数到function有点麻烦,只能重新获取对象  

var obj = document.getElementById("validationCode");

if (i > 0) {

obj.innerHTML = "距离下次获取还有" + i + "秒";

obj.disabled = true;

} else {

obj.innerHTML = "获取验证码";

obj.disabled = false;

}

}

function checkUser() {

var username = document.getElementById("username").value;

var password = document.getElementById("password").value;

var repassword = document.getElementById("repassword").value;

var email = document.getElementById("email").value;

var code = document.getElementById("code").value;

if (username == "") {

alert("用户名不能为空");

return false;

}

if (password == "") {

alert("密码不能为空");

return false;

}

if (email == "") {

alert("邮箱不能为空");

return false;

}

if (code == "") {

alert("验证码不能为空");

return false;

}

if (password != repassword) {

alert("两次密码不一致");

} else {

return true;

}

}

</script>

和之前不同的主要是加粗的部分,这段代码可以在点击"获取验证码"按钮的时候,将电话号码发送到指定的URL中而且还不跳转页面.

然后是后端代码:

  处理点击"获取验证码"按钮产生的请求的控制器

调用发送短信的的接口,并且记录生成的验证码,供后续登陆时比较.

用户收到验证码,填入验证码,填入其他信息,点击"注册",将请求发送到注册控制器中.

控制器中获取用户填入的验证码,如果和生成的不同,则说明验证码不正确,不允许注册,并提示用户重试

如果相同,则注册成功.

结果就不贴了,亲测有效,师兄可以后面在任务审核时亲自尝试一下.

最后就是将账号密码等集成到spring配置文件中,这样,如果我们需要更改账户,就不用该代码,直接更改配置文件即可.

采用setter的方式注入依赖.

2.准备了一波小课堂

选择的题目是Filter和Interceptor的区别以及和AOP的联系

Filter和Interceptor的概念

       Filter可以认为是Servlet的一种“加强版”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

       Interceptor是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个Action执行的前后执行的代码,也可以在一个Action执行前阻止其执行。同时也提供了一种可以提取Action中可重用的部分的方式。

FILTER和INTERCEPTOR的区别

        1. Filter是基于函数回调的,而Interceptor则是基于Java反射的。

        2. Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。

        3. Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。

        4. Interceptor可以访问Action的上下文,值栈里的对象,而Filter不能。

        5. 在action的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。所以Fileter配置在web.xml中,而Interceptor配置在springmvc-servlet.xml中.

执行顺序. 过滤前-拦截前-控制器执行-拦截后-过滤后

Filter,Interceptor和AOP的关系

       Interceptor和AOP可以看作是一样的,因为其内部实现原理都是利用JAVA的反射机制(AOP是使用动态代理,动态代理的实现就是java反射机制).但是Filter和Interceptor有本质上的区别.其实现是通过回调函数.两者的控制粒度也不同,AOP和Interceptor的控制粒度都是方法级别,但是Filter的控制粒度就是servlet容器,它只能在servlet容器执行前后进行处理.

二.明天的计划

1.完善小课堂

2.尽量实现邮箱通道

三.遇到的问题

暂无

四.收获

对Filter和Interceptor的理解更加深入

五.任务进度情况

禅道进度情况: http://task.ptteng.com/zentao/project-task-259.html

暂无延期风险


返回列表 返回列表
评论

    分享到