用户注册
1、业务逻辑
1、点击login.jsp页面中的”注册按钮“——》跳转到用户注册的jsp页面(用view-controller完成)
2、register.jsp页面:包括:用户名、密码、邮箱——》表单数据传递给后端
3、user/register:
-
判断用户名是否重复,如果重复返回json数据
-
首先为用户生成唯一的UUID编码,
-
为用户生成唯一的根目录ID
-
添加用户信息到user表
-
添加根目录到dir表
-
将上述的插入操作添加到事务。
4、显示注册成功的jsp页面,提供一个返回登录页的按钮。
2、步骤
1、用view-controller完成到用户注册页面的跳转
<mvc:view-controller path="/file/fileinfo" view-name="fileinfo"></mvc:view-controller>
2、在创建好register.jsp页面之后,需要在拦截器中对所有的register相关资源放行。
<mvc:exclude-mapping path="/user/*register*" />
3、在register.jsp页面中写好注册的表单,以ajax方式在前后端传输数据,将填写的注册信息发送给后端user/register。
<script type="text/javascript">
$(function () {
$("#register_btn").click(function () {
var loginAct=$.trim($("#loginAct").val());
var loginPwd = $.trim($("#loginPwd").val());
var loginPwdAgain = $.trim($("#loginPwdAgain").val());
var email = $.trim($("#email").val());
if(loginAct==""){
$("#msg").html("请输入账号!");
return false;
}
//如果账号密码有空,则需要强制终止该方法
if(loginPwd==""){
$("#msg").html("请输入密码!");
return false;
}
if(loginPwd.length<6||loginPwd.length>16){
$("#msg").html("密码长度在6~16之间!");
return false;
}
if(loginPwdAgain==""){
$("#msg").html("请再次输入密码!");
return false;
}
if (loginPwd!=loginPwdAgain) {
$("#msg").html("两次输入的密码不一致!");
//如果账号密码有空,则需要强制终止该方法
return false;
}
$.ajax({
url:"user/register",
data:{
"loginAct":loginAct,
"loginPwd":loginPwd,
"email":email,
},
type:"post",
dataType:"json",
success:function (resp) {
// alert(resp.msg);
//跳转到初始页
if(resp.success){
window.location.href="user/registerSuccess";
}else{
$("#msg").html(resp.msg);
}
}
})
})
})
</script>
4、user/register调用UerService中的/register方法,主要完成如下功能:
- 调用UserDao中的selectByloginAct,判断用户名是否重复,重复则抛出异常,前端显示”该用户名已被注册“
- 为用户生成唯一的UUID编码
- 为用户生成唯一的根目录ID
- 添加用户信息到user表
- 添加根目录信息到dir表
- 将上述的插入操作开启事务。
5、事务
原始的事务:编程式事务
框架下的事务:声明式事务
1、声明事务管理器
<!--声明事务管理器-->
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2、配置AOP
配置切入点表达式:指定哪些包中的类要使用事务
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern)
- modifiers-pattern:访问权限类型
- ret-type-pattern:方法的返回值类型
- declaring-type-pattern 包名类名
- name-pattern(param-pattern)方法名(参数类型和参数个数)
- throws-pattern 抛出异常类型
- ?表示可选部分
<!--配置aop-->
<aop:config>
<aop:pointcut id="servicePt" expression="execution(* *..*ServiceImpl.*(..))"/>
<aop:advisor advice-ref="myAdive" pointcut-ref="servicePt"/>
</aop:config>
3、声明属性
<!--配置事务通知:声明业务方法的事务属性:(隔离级别、传播行为、超时时间)-->
<tx:advice id="myAdive" transaction-manager="dataSourceTransactionManager">
<tx:attributes>
<tx:method name="register" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>
四、报错
1、ajax请求可以进入java后台,但是获取不到java后台返回的数据
原因:
如果input type为submit时,你每次在提交的时候会发现所有输入框中数字全部清空了,说明页面重新刷新了,那么问题来了,ajax并不会导致页面刷新啊!真正导致页面刷新的是这个type为submit的input标签,强制要求页面刷新,因为页面刷新了,那么ajax返回的信息来到了一个完全陌生的页面,自然返回的是失败啊。 (参考https://blog.csdn.net/qq_37591637/article/details/88751759)
<button id="register_btn" type="submit" class="btn btn-primary btn-block">注册</button>
解决方法:
将type修改为button类型
<button id="register_btn" type="button" class="btn btn-primary btn-block">注册</button>