LoginServlet
package cn.itcast.travel.web.servlet;
import cn.itcast.travel.domain.ResultInfo;
import cn.itcast.travel.domain.User;
import cn.itcast.travel.service.UserService;
import cn.itcast.travel.service.impl.UserServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取用户密码
Map map = request.getParameterMap();
//2.创建user对象
User user = new User();
//3.将map获取值传入user对象中
try {
BeanUtils.populate(user, map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//4.调用service查询
UserService service = new UserServiceImpl();
User u = service.login(user);
//5.对用户的非空、激活、成功登录进行判断
ResultInfo info = new ResultInfo();
if (u == null) {
info.setFlag(false);
info.setErrorMsg("用户或密码不存在");
}
if (u != null && !"Y".equals(u.getStatus())) {
info.setFlag(false);
info.setErrorMsg("用户未激活,请先激活");
}
if (u != null && "Y".equals(u.getStatus())) {
info.setFlag(true);
}
//响应数据 (设置json数据返回 和格式)
response.setContentType("application/json;charset=utf-8");
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(response.getOutputStream(), info);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
Uservice
UserDao
Service & Dao代码实现UserServiceImpl
@Override
public User login(User user) {
return userDao.findByUsernameAndPassword(user.getUsername(),user.getPassword());
}
UserDao
//用户登录
User findByUsernameAndPassword(String username, String password);
UserDaoImpl
@Override
public User findByUsernameAndPassword(String username, String password) {
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.class), username,password);
} catch (Exception e) {
}
return user;
}
实现_前台页面
login.html
测试效果图
本次测试效果图 存在问题 后台没有校验验证码 这个自行增加 可在前面的代码中 进行模仿
登录功能_姓名提示header.html
FindUserServlet
package cn.itcast.travel.web.servlet;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从request中获取name值
Object name = request.getSession().getAttribute("name");
//将name值回显到客户端
ObjectMapper mapper = new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
String json = mapper.writeValueAsString(name);
response.getWriter().write(json);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
细节注意:
1、writeValue和writeValueAsString的区别
二者都是Java对象转换JSON的方法
* writeValue(参数1,obj):
参数1:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
* writeValueAsString(obj):将对象转为json字符串
2、更改好代码之后 如果没有作用 很可能是缓存问题
解决:
清除浏览器cookie缓存数据 或者是更换一个浏览器进行测试
3、如果获取name值为null
解决:
退出功能什么叫做登录了?session中有user对象。
实现步骤:
1. 访问servlet,将session销毁
2. 跳转到登录页面
ExitServlet
package cn.itcast.travel.web.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/exitServlet")
public class ExitServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.清除session信息
request.getSession().invalidate();
//2.跳转登录页
response.sendRedirect(request.getContextPath() + "/login.html");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
测试效果图
细节注意
//invalidate方法用于 主要用于注销 调用该方法 会清空已定义的session 而不是清空session里的值 //如果是清空session里面的值 的话removeAttribute是这个方法
// request.getRequestDispatcher("xxxx").forward(request,response);



