1 login.jsp代码
2 web层LoginServlet
package www.test.web.servlet;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import www.test.domain.User;
import www.test.service.LoginService;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 解决乱码问题
request.setCharacterEncoding("UTF-8");
HttpSession session = request.getSession();
// 获得页面输入的验证
String checkCode_client = request.getParameter("checkCode");
// 获得生成图片的文字的验证码
String checkCode_session = (String) request.getSession().getAttribute("checkcode_session");
// 比对页面的和生成图片的文字的验证码是否一致
if (!checkCode_session.equals(checkCode_client)) {
request.setAttribute("loginInfo", "您的验证码不正确");
request.getRequestDispatcher("/login.jsp").forward(request, response);
return;
}
// 获取用户输入的数据
String username = request.getParameter("username");
String password = request.getParameter("password");
LoginService service = new LoginService();
User user = null;
try {
user = service.login(username, password);
} catch (SQLException e) {
e.printStackTrace();
}
if (user != null) {
// 登录成功
// 判断用户是否勾选自动登录
String autoLogin = request.getParameter("autoLogin");
if (autoLogin != null) {
Cookie cookie_username = new Cookie("cookie_username", user.getUsername());
Cookie cookie_password = new Cookie("cookie_password", user.getPassword());
// 设置 cookie 的持久化时间
cookie_username.setMaxAge(60 * 60);
cookie_password.setMaxAge(60 * 60);
// 设置 cookie 的携带路径
cookie_username.setPath(request.getContextPath());
cookie_password.setPath(request.getContextPath());
// 发送 cookie
response.addCookie(cookie_username);
response.addCookie(cookie_password);
}
//将登录的用户的 user 对象存到 session 中
session.setAttribute("user", user);
//重定向到首页
response.sendRedirect(request.getContextPath());
} else {
request.setAttribute("loginInfo", "密码或者用户名不正确");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
3 web层AutoLoginFilter
package www.test.web.filter;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import www.test.domain.User;
import www.test.service.LoginService;
public class AutoLoginFilter implements Filter {
public AutoLoginFilter() {
super();
}
private FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
// 获得 cookie 中用户名和密码 进行登录的操作
// 定义 cookie_username
String cookie_username = null;
// 定义 cookie_password
String cookie_password = null;
// 获得 cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {// 获得名字是 cookie_username 和
// cookie_password
if ("cookie_username".equals(cookie.getName())) {
cookie_username = cookie.getValue();
}
if ("cookie_password".equals(cookie.getName())) {
cookie_password = cookie.getValue();
}
}
}
// 判断 username 和 password 是否是 null
if (cookie_username != null && cookie_password != null) {
// 登录的代码
LoginService service = new LoginService();
User user = null;
try {
user = service.login(cookie_username, cookie_password);
} catch (SQLException e) {
e.printStackTrace();
}
// 将登录的用户的 user 对象存到 session 中
session.setAttribute("user", user);
}
//放行
filterChain.doFilter(request, response);
}
public void destroy() {
}
}
4 service层LoginService
package www.test.service;
import java.sql.SQLException;
import www.test.dao.LoginDao;
import www.test.domain.User;
public class LoginService {
public User login(String username, String password) throws SQLException {
LoginDao dao = new LoginDao();
return dao.login(username,password);
}
}
5 dao层LoginDao
package www.test.dao;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import www.test.domain.User;
import www.test.utils.C3P0Utils;
public class LoginDao {
public User login(String username, String password) throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select * from user where username =? and password = ?";
return qr.query(sql, new BeanHandler<User>(User.class), username,password);
}
}
6 header.jsp代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<!-- 登录 注册 购物车... -->
<div class="container-fluid">
<div class="col-md-4">
<img src="img/logo2.png" />
</div>
<div class="col-md-5">
<img src="img/header.png" />
</div>
<div class="col-md-3" style="padding-top: 20px">
<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>
</div>
</div>
<!-- 导航条 -->
<div class="container-fluid">
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
aria-expanded="false">
<span class="sr-only">Toggle navigation</span> <span
class="icon-bar"></span> <span class="icon-bar"></span> <span
class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">首页</a>
</div>
<div class="collapse navbar-collapse"
id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="active"><a href="product_list.htm">手机数码<span
class="sr-only">(current)</span></a></li>
<li><a href="#">电脑办公</a></li>
<li><a href="#">电脑办公</a></li>
<li><a href="#">电脑办公</a></li>
</ul>
<form class="navbar-form navbar-right" role="search">
<div class="form-group" style="position: relative">
<input type="text" class="form-control" placeholder="Search"
onkeyup="searchWord(this)">
<div id="showDiv"
style="display: none; position: absolute; z-index: 1000; background: #fff; 179px; border: 1px solid #ccc;">
</div>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
<!-- 完成站内搜索 -->
<script type="text/javascript">
function overFn(obj) {
$(obj).css("background", "#DBEAF9");
}
function outFn(obj) {
$(obj).css("background", "#fff");
}
function clickFn(obj) {
$("#search").val($(obj).html());
$("#showDiv").css("display", "none");
}
function searchWord(obj) {
//1、 获得输入框的输入的内容
var word = $(obj).val();
//2、 根据输入框的内容去数据库中模糊查询---List<Product>
var content = "";
$
.post(
"${pageContext.request.contextPath}/searchWord",
{
"word" : word
},
function(data) {
if (data.length > 0) {
for (var i = 0; i < data.length; i++) {
content += "<div style='padding:5px;cursor:pointer'onclick='clickFn(this)' onmouseover='overFn(this)'onmouseout='outFn(this)'>"
+ data[i]
+ "</div>";
}
$("#showDiv").html(content);
$("#showDiv").css("display",
"block");
}
}, "json");
}
</script>
</div>
</div>
</nav>
</div>
7 filter配置文件
<filter>
<filter-name>AutoLoginFilter</filter-name>
<filter-class>www.test.web.filter.AutoLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AutoLoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>