①找到登录界面 提交表单到 action为一个servlet地址
HttpSession session = request.getSession();
String username = request.getParameter("username");
String password = request.getParameter("password");
UserService userService=new UserService();
User user=null;
try {
user = userService.checkLogin(username, password);
} catch (SQLException e) {
e.printStackTrace();
}
if (user==null){
System.out.println("登录失败");
request.setAttribute("loginInfo","用户名或密码错误");
request.getRequestDispatcher("/login.jsp").forward(request,response);
}else {
session.setAttribute("user",user);
response.sendRedirect(request.getContextPath());
}
我们可以看到首先获取用户名以及密码 查询的结果是一个对象
然后进行判断 为空则登录失败 然后把错误信息存储到request域中 然后进行请求转发到登录页面 显示错误信息
<div><span style="color: red">${loginInfo}</span></div>
登录成功则把user对象存储到session域中
然后重定向到首页
service层
public User checkLogin(String username, String password) throws SQLException {
UserDao userDao=new UserDao();
User user=userDao.checkLogin(username,password);
return user;
}
dao层
public User checkLogin(String username, String password) throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select * from user where username=? and password=?";
return runner.query(sql, new BeanHandler<User>(User.class), username,password);
}
②定位到首页
<ol class="list-inline">
<c:if test="${empty user }">
<li><a href="login.jsp">登录</a></li>
<li><a href="register.jsp">注册</a></li>
</c:if>
<c:if test="${!empty user }">
<li>欢迎您,${user.username }</li>
<li><a href="#">退出</a></li>
</c:if>
<li><a href="cart.jsp">购物车</a></li>
<li><a href="order_list.jsp">我的订单</a></li>
</ol>
这个时候我们的菜单要动态进行显示 user对象为空 和不为空两种情况 刚开始时候没登录肯定为空
所以不会显示欢迎你 以及退出
另外这个使用了jstl 所以首先要导入jstl (很重要 否则 会出现都存在的情况)
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>