登录
分析

前台代码
header和footer
这两个里面的内容是通过ajax请求添加的,因此header.html和footer.html可以复用
修改header
<script>
$(function (){
$.get("findUserServlet",{},function (data){
//{uid:1,name:'李四'}
var msg = "欢迎回来,"+data.name;
$("#span_username").html(msg);
});
});
</script>
...
<span id="span_username"></span>
...
后台代码
LoginServlet、UserServlet、UserDao
LoginServlet
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//验证校验
String check = request.getParameter("check");
//从sesion中获取验证码
HttpSession session = request.getSession();
String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
session.removeAttribute("CHECKCODE_SERVER");//为了保证验证码只能使用一次
//比较
if(checkcode_server == null || !checkcode_server.equalsIgnoreCase(check)){
//验证码错误
ResultInfo info = new ResultInfo();
//注册失败
info.setFlag(false);
info.setErrorMsg("验证码错误");
//将info对象序列化为json
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(info);
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);
//验证码如果错误,直接return掉,后面的操作就不用做了
return;
}
//1.获取用户名和密码数据
Map<String, String[]> map = request.getParameterMap();
//2.封装User对象
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//调用Service查询
UserService service = new UserServiceImpl();
User u = service.login(user);
ResultInfo info = new ResultInfo();
//4.判断用户对象是否为null
if (u == null){
//用户名或密码错误
info.setFlag(false);
info.setErrorMsg("用户名或密码错误");
}
//5.判断用户是否激活
if (u != null && !"Y".equals(u.getStatus())){
//用户未激活
info.setFlag(false);
info.setErrorMsg("用户尚未激活,请激活!");
}
//6.登录成功判断
if (u != null && "Y".equals(u.getStatus())){
//登录成功
request.getSession().setAttribute("user",u);
info.setFlag(true);
}
//响应数据,将ResultInfo转换为json数据,序列化到客户端
ObjectMapper mapper = new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
mapper.writeValue(response.getOutputStream(),info);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
UserServletImpl
- UserService
UserDaoImpl
/**
* 根据用户名和密码查询
* @param username
* @param password
* @return
*/
@Override
public User findByUsernameAndPassword(String username, String password) {
//jdbcTemplate里面,如果说传递的用户名,没有查询到一个user对象
//或者说封装没有成功,它是不会返回一个null,而是直接报异常,所以给题目做了一个try。。catch。。
User user = null;
try {
//1.定义sql
String sql = "select * from tab_user where username = ? and password = ?";
//2.执行sql
user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username,password);
}catch (Exception e){
}
return user;
}
findUserServlet
因为跟着视频学习的时候,视频里面的代码没有设置session,所以,首先,我们需要在该处添加这一段代码才能实现显示用户名
退出
登录:就是session中有user对象叫做登录
退出:当用户一点击退出的超链接,访问Servlet将session的user删除掉,并且把
页面跳转到登录页面
实现步骤
1.访问servlet,将session销毁
2.跳转到登录页面。
代码实现
header.html
...
<a href="javascript:location.href='exitServlet';">退出</a>
...
ExitServlet
@WebServlet("/exitServlet")
public class ExitServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//销毁session
request.getSession().invalidate();
//跳转页面
response.sendRedirect(request.getContextPath()+"/login.html");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}