分析
- 使用了StringJDBC与Druid第三方工具
- 前台代码
$(function () {
$("#btn_sub").click(function () {
$.post("loginServlet", $("#loginForm").serialize(), function (data) {
if (data.flag) {
//登录成功
location.href = "index.html"
} else {
//登录失败
$("#errorMsg").html(data.errorMsg)
}
})
})
})
对登录按钮进行事件绑定,使用jQuery进行Ajax异步交互,根据返回的信息,进行跳转页面和给出提示.
- Servlet
//获取验证码
String check = request.getParameter("check");
HttpSession session = request.getSession();
String checkcodeServer = (String) session.getAttribute("CHECKCODE_SERVER");
//标记
boolean flag = false;
String errorMsg = null;
if (checkcodeServer != null && !"".equals(checkcodeServer) && checkcodeServer.equalsIgnoreCase(check)) {
//获取用户名和密码
Map<String, String[]> map = request.getParameterMap();
//封装数据
if (map != null && map.size() != 0) {
User user = new User();
try {
BeanUtils.populate(user, map);
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
//调用service方法
UserService service = new UserServiceImpl();
User u = service.login(user);
//判断结果
if (u == null) {
//用户名密码错误
errorMsg = "用户名或密码错误";
} else if (!"Y".equals(u.getStatus())) {
//用户尚未激活
errorMsg = "您尚未激活,请进行激活";
} else {
session.setAttribute("user", u);
flag = true;
}
} else {
errorMsg = "请输入账号密码";
}
} else {
errorMsg = "验证码错误";
}
//封装结果
ResultInfo info = new ResultInfo();
info.setFlag(flag);
info.setErrorMsg(errorMsg);
//将结果转换为json
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(info);
//响应数据
System.out.println(json);
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);
进行验证码判断,激活判断,判空,然后根据service方法返回的信息,进行处理.最后同一封装成结果类转换为json格式返回.
- Service
@Override
public User login(User user) {
return dao.findByUsernameAndPassword(user.getUsername(),user.getPassword());
}
调用dao中根据用户名和密码查询用户的方法并返回
- Dao
public User findByUsernameAndPassword(String username, String password) {
String sql = "select * from tab_user where username=? and password=?";
User user = null;
try {
user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username, password);
} catch (DataAccessException e) {
// e.printStackTrace();
}
return user;
}
根据给出的用户名和密码,在数据库中查找相应的用户.(未使用redis优化)
7.2.3 index页面中用户姓名的提示信息功能
-
实现目的
-
分析
-
头部html
$(function () {
$.get("findUserServlet", function (data) {
if (data != null) {
var msg = "欢迎回来," + data.name;
$("#span_username").html(msg)
}
})
})
每次加载头部html都进行异步请求,根据返回信息显示(较为简陋,简单实现)
- Servlet
//从sessoin中获取登录用户
HttpSession session = request.getSession();
Object user = session.getAttribute("user");
//将user写回客户端
ObjectMapper mapper = new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
mapper.writeValue(response.getOutputStream(), user);
因为在登录时向session中存入了user对象,所以可以直接返回usre的json.
退出登录
- 分析
- index.html
<a href="javascript:location.href='exitServlet';">退出</a>
- Servlet
//销毁session
request.getSession().invalidate();
//跳转login.html页面
response.sendRedirect(request.getContextPath()+"/login.html");