发表于: 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
暂无延期风险
评论