cn.tedu.store.mapper
中新建UserMapper.java
接口User selectUserByUserName(String userName)
cn.tedu.store.service
创建IUserService
接口和实现类UserServiceImpl
用户名
和密码
用户名
和密码
,登录不成功无非是是两种可能User login(String userName,String passWord
)`selectUserByUserName
返回user对象user
是否为null
user=null
,抛出UserNotFoundException
异常user!=null
,那么验证其中的密码是否正确PassWordNotMatchException
异常user
对象cn.tedu.store.service.ex
中新建两个异常类UserNotFoundException
,继承Exception
,重写父类的构造方法
PasswordNotMatchException
,继承Exception
,重写父类的构造方法
IUserService
接口中定义/**
* 实现登录的业务
* @param userName 用户名
* @param passWord 密码
* @return User对象
* @throws UserNotFoundException 用户不存在的异常
* @throws PassWordNotMatchException 密码不匹配的异常
*/
User login(String userName,String passWord) throws UserNotFoundException, PassWordNotMatchException;
UserServiceImpl
实现类实现方法/**
* 登录方法
* 1. 通过selectUserByUserName返回user对象
* 2.判断user是否为null
* 3.如果user=null,抛出UserNotFoundException异常
* 4.如果user!=null,那么验证其中的密码是否正确
* 5.如果密码不匹配,抛出PassWordNotMatchException异常
* 6. 如果密码匹配,那么返回user对象
* @throws UserNotFoundException
* @throws PassWordNotMatchException
*/
public User login(String userName, String passWord) throws UserNotFoundException, PassWordNotMatchException {
User user=userMapper.selectUserByUserName(userName); //根据用户名查询,返回user对象
if (user==null) { //user为null,表示用户名不存在
throw new UserNotFoundException("用户名不存在");
}else { //如果用户名存在,验证密码
if (passWord.equals(user.getPassword())) { //如果密码匹配
return user; //返回user对象即可
}else { //如果密码不相同,那么直接抛出密码不匹配的异常即可
throw new PassWordNotMatchException("密码不匹配");
}
}
}
TestUser
中测试@Test
public void testLoginService() {
// 加载Spring的配置文件,测试的业务层,因此需要spring-dao.xml和spring-service.xml配置文件
AbstractApplicationContext ac = new ClassPathXmlApplicationContext(
"spring-dao.xml", "spring-service.xml");
IUserService userService = ac.getBean("userServiceImpl",
IUserService.class);
String username="陈加兵";
String password="123456";
try {
User user=userService.login(username, password);
System.out.println("用户登录成功");
} catch (UserNotFoundException e) {
System.out.println(e.getMessage());
} catch (PassWordNotMatchException e) {
System.out.println(e.getMessage());
}
}
cn.tedu.store.controller
中新建UserController
/user/showLogin.do
/user/login.do
userName
和password
POST
ResposneBody
/**
* 显示登录视图 login.jsp
* @return
*/
@RequestMapping("/showLogin.do")
public String showLogin() {
return "login"; // 直接返回一个视图名称即可
}
/**
* 点击登录按钮处理异步请求的方法
* @param username 用户名
* @param password 密码
* @param session session域
* @return 返回处理结果
*/
@RequestMapping("/login.do")
@ResponseBody
public ResponseResult<Void> login(String username,String password,HttpSession session){
ResponseResult<Void> result=new ResponseResult<Void>(); //新建返回结果对象
try {
User user=userservice.login(username, password); //调用service的login方法登录
result.setState(1); //设置响应状态码
result.setMessage("登录成功"); //设置提示信息
session.setAttribute("user",user); //将user对象存放在session中
} catch (UserNotFoundException e) { //用户名不存在的异常
result.setState(0); //设置响应状态码
result.setMessage(e.getMessage()); //设置提示信息
} catch (PassWordNotMatchException e) { //密码不匹配的异常
result.setState(0); //设置响应状态码
result.setMessage(e.getMessage()); //设置提示信息
}
return result; //返回结果
}
login.jsp
页面中添加异步请求//点击登录按钮的方法
$('#bt-login').click(function(){
var username=$("#username").val(); //用户名
var password=$("#password").val(); //密码
var d={"username":username,"password":password}; //封装请求数据
var url="<%=request.getContextPath()%>/user/login.do"; //请求地址
//异步提交请求,进行验证
$.post(url,d,function(data,status,xhr){
//如果响应成功
if(status=="success"){
$("#showResult").text(data.message); //显示提示信息
//如果登录成功
if(data.state==1){
Save(); //调用save方法保存用户名和密码,保证后面自动登录
//跳转到首页index.jsp
window.location.href="<%=request.getContextPath()%>/main/showIndex.do";
}else{ //登录没有成功
$("#showResult").css("color","red"); //设置提示信息的文本颜色为红色
}
}
});
});
$(document).ready(function () {
if ($.cookie("rmbUser") == "true") {
$("#ck_rmbUser").attr("checked", true);
$("#username").val($.cookie("username"));
$("#password").val($.cookie("password"));
}
});
//记住用户名密码,保存在cookie中
function Save() {
if ($("#ck_rmbUser").prop("checked")) {
var str_username = $("#username").val();
var str_password = $("#password").val();
$.cookie("rmbUser", "true", { expires: 7 }); //存储一个带7天期限的cookie
$.cookie("username", str_username, { expires: 7 });
$.cookie("password", str_password, { expires: 7 });
}
else {
$.cookie("rmbUser", "false", { expire: -1 });
$.cookie("username", "", { expires: -1 });
$.cookie("password", "", { expires: -1 });
}
};
用户名
和密码
直接查询人数,因为sql
是不区分大小写的,但是我们的密码是区分大小写的,比如select * from t_user where username=? and password=?
,这个是不可以直接使用的,应该是使用用户名查询返回User
对象,然后在比较用户输入的密码和对象中的密码是否相同:password.equals(user.getPassWord())
css
文件,可以使用内嵌式
的样式修改即可