1、什么是ajax?
ajax是一种无需加载整个网页的情况下,能进行局部刷新的技术。
2、下面是使用spring,springmvc,mybatis框架完成修改密码功能。
项目工程目录如下:
pom.xml文件:
org.springframework
spring-webmvc
4.3.9.RELEASE
org.springframework
spring-jdbc
4.3.9.RELEASE
junit
junit
4.12
org.mybatis
mybatis
3.4.6
org.mybatis
mybatis-spring
1.3.2
mysql
mysql-connector-java
5.1.6
commons-dbcp
commons-dbcp
1.4
com.fasterxml.jackson.core
jackson-databind
2.9.7
配置web.xml:
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:config/*.xml
1
springmvc
*.do
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterEncodingFilter
/
MyFilter
MyFilter
com.hbust.mystore.filter.MyFilter
MyFilter
/web/*
配置config下的xml文件:
1)springdao.xml:
2)springmvc.xml:
3)springservice.xml:
3、用jquery来实现ajax来提交表单数据,下面要实现的功能是修改用户密码。
jquery包:
代码如下:
1)Html代码:
更改密码
输入旧密码:
输入新密码:
确认新密码:
用jquery来实现ajax:
$("#save_password").click(function(){
var url="../user/handle_change_password.do";//交给控制器处理的url
var old_password=$("#old_password").val();
var new_password=$("#new_password").val();
var data="old_password="+old_password+"&new_password="+ new_password;
//url,data,type,dataType,success,ajax请求的五要素
$.ajax({
"url":url,
"data":data,
"type":"post",
"dataType":"json",
"success":function(json){
if(json.state==200){
alert("密码修改成功!")
}if(json.state==402){
alert("密码修改失败!")
} else if(json.state==403){
alert("密码修改失败!")
}else if(json.state==502){
alert("严重错误!"+json.message)
} else{
alert("出现未知错误!")
}
})
});
2)、控制器UserController类
@RequestMapping("/handle_change_password.do")
@ResponseBody
public ResponseResult handle_change_password(
// @RequestParam表示从表单传过来的参数,值要与ajax表单的data保持一致
@RequestParam("old_password")String old_password,
@RequestParam("new_password")String new_password,
HttpSession session
){
System.out.println("开始执行修改密码逻辑..."+old_password+","+new_password);
//从session中获取id
Integer uid=getFromUidBySession(session);
userService.changePasswordById(uid, old_password, new_password);
//调用服务层来提供改密服务
System.out.println("密码修改成功!");
return new ResponseResult();
}
3)服务层的UserServiceImpl类,实现接口IuserService里的抽象方法
@Service("userService")
public class UserServiceImpl implements IUserService{
public void changePasswordById(
Integer uid,String old_password,String new_password
)throws UserNotFoundException,
PasswordNotMatchException,
UpdateDataException{
//1、根据用户id查询到用户的信息
User user=getUserById(uid);
//2、将用户输入的密码加密
if(user!=null){
String salt=user.getSalt();//获取加密前的盐值
String md5password=getEncrptedPassword(old_password,salt);
//3、将用户输入加密后的密码与数据库的密码进行匹配
if(user.getPassword.equals(md5password)){
//4、匹配成功,则修改密码,匹配失败,则抛出异常
//System.out.println("原密码正确...")
String md5newpassword=getEncrptedPassword(new_password,salt);
changePassword(uid,md5newpassword);//调用修改密码方法
}else{
throw new PasswordNotMatchException("原密码不正确!");
}
}else{
throw new UserNotFoundException("用户名未找到!")
}
}
private void changePassword(Integer uid,
String md5newpassword) throws UpdateDataException{
//调用持久层,实现密码修改
System.out.println("newpassword:"+md5newpassword);
Integer row=userMapper.changePassword(md5newpassword,uid);
//由于是根据用户id来进行修改的,正确操作下,受影响的行数应该为1
if(row!=1){
throw new UpdateDataException("修改密码时发现未知错误!请联系管理员!");
}
}
}
4)调用dao层的userMapper
//用@Param("password")来获取到userService传过来的参数,不能少,否则接收不了参数
Integer changePassword(
@Param("password") String password
,@Param("id") Integer uid);
对应的userMapper.xml文件如下:
UPDATE store_user
SET
password=#{password}
WHERE id=#{id}
实现效果如下: