①找到登錄界面 提交表單到 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"%>