package com.controller;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.RequestDispatcher;
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 com.model.bean.UserInfo;
import com.model.service.UserInfoService;
/**
-
Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;/**
- @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
- @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
/**
-
@see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");String action=request.getParameter("flag");//先獲取是否有flag 如果有 說明是自動登錄
if("auto".equals(action)){//如果action是auto 說明是自動登錄請求 執(zhí)行自動登錄方法
try {
doAutoLogin(request,response);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{//如果不是 說明是沒有自動登錄請求 正常登陸
doLogin(request,response);
}
}
private void doLogin(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
UserInfo user= new UserInfo();
getParam(request,user);//獲取表單中發(fā)來的數(shù)據(jù)的方法 并且將數(shù)據(jù)封裝到(UserInfo)user中
try {
boolean flag=UserInfoService.getInstance().findUserPw(user);//先判斷用戶賬號密碼是否正確
if(flag){//如果正確 下面看是否點擊了自動登陸復選框
//獲取自動登錄復選框的值
String autologin=request.getParameter("autologin");
if("1".equals(autologin)){//如果點擊了復選框 那么向Cookie中 存入用戶的用戶名和密碼
//cookie中存儲數(shù)據(jù)
Cookie c=new Cookie("auto",user.getUsername()+","+user.getPassword());
c.setMaxAge(606024);
c.setPath("/");
response.addCookie(c);//將數(shù)據(jù)加入瀏覽器額Cookie中
}else{//如果沒選擇復選框 那么 清除cookie中的數(shù)據(jù)
Cookie c=new Cookie("auto","");
c.setMaxAge(0);
c.setPath("/");
response.addCookie(c);
}
response.sendRedirect("MainStation.jsp");//登陸成功后跳至主界面
}else{//如果賬號密碼錯誤 則登陸失敗 則請求轉發(fā) 重新回到本界面
String error="錯誤";
request.setAttribute("error", error);RequestDispatcher rs=request.getRequestDispatcher("login.jsp"); rs.forward(request, response); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }}
//自動登錄方法
private void doAutoLogin(HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException, ServletException {Cookie[] cookie=request.getCookies();//獲取瀏覽器Cookie數(shù)組 for(Cookie c:cookie){ //遍歷數(shù)組 String name=c.getName(); //獲取元素的name String value=c.getValue(); //獲取元素的value if("auto".equals(name)){ //如果有auto的name 進行判斷 if(value!=null&&!"".equals(value)){ //如果value值不為空 向下執(zhí)行 String[] str=value.split(","); //拆分其中的值 String username=str[0]; String password=str[1]; UserInfo user=new UserInfo(); //獲取值 將其封裝 user.setUsername(username); user.setPassword(password); boolean flag=UserInfoService.getInstance().findUserPw(user);//判斷用戶名密碼是否正確 if(flag){//如果正確 登陸成功 跳轉至主界面 response.sendRedirect(request.getContentType()+"/MainStation.jsp"); }else{//如果不正確 清除Cookie 請求轉發(fā) 回到當前界面 //清除Cookie中的數(shù)據(jù) Cookie coo=new Cookie("auto",""); coo.setMaxAge(0); coo.setPath("/"); response.addCookie(coo); //登陸失敗 request.setAttribute("error", "用戶名或密碼錯誤"); request.getRequestDispatcher("login.jsp").forward(request, response); } } } }}
private void getParam(HttpServletRequest request, UserInfo user) {
user.setUsername(request.getParameter("username"));
user.setPassword(request.getParameter("password"));}
- @see HttpServlet#HttpServlet()
}