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 如果有 說(shuō)明是自動(dòng)登錄
if("auto".equals(action)){//如果action是auto 說(shuō)明是自動(dòng)登錄請(qǐng)求 執(zhí)行自動(dòng)登錄方法
try {
doAutoLogin(request,response);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{//如果不是 說(shuō)明是沒有自動(dòng)登錄請(qǐng)求 正常登陸
doLogin(request,response);
}
}
private void doLogin(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
UserInfo user= new UserInfo();
getParam(request,user);//獲取表單中發(fā)來(lái)的數(shù)據(jù)的方法 并且將數(shù)據(jù)封裝到(UserInfo)user中
try {
boolean flag=UserInfoService.getInstance().findUserPw(user);//先判斷用戶賬號(hào)密碼是否正確
if(flag){//如果正確 下面看是否點(diǎn)擊了自動(dòng)登陸復(fù)選框
//獲取自動(dòng)登錄復(fù)選框的值
String autologin=request.getParameter("autologin");
if("1".equals(autologin)){//如果點(diǎn)擊了復(fù)選框 那么向Cookie中 存入用戶的用戶名和密碼
//cookie中存儲(chǔ)數(shù)據(jù)
Cookie c=new Cookie("auto",user.getUsername()+","+user.getPassword());
c.setMaxAge(606024);
c.setPath("/");
response.addCookie(c);//將數(shù)據(jù)加入瀏覽器額Cookie中
}else{//如果沒選擇復(fù)選框 那么 清除cookie中的數(shù)據(jù)
Cookie c=new Cookie("auto","");
c.setMaxAge(0);
c.setPath("/");
response.addCookie(c);
}
response.sendRedirect("MainStation.jsp");//登陸成功后跳至主界面
}else{//如果賬號(hào)密碼錯(cuò)誤 則登陸失敗 則請(qǐng)求轉(zhuǎn)發(fā) 重新回到本界面
String error="錯(cuò)誤";
request.setAttribute("error", error);RequestDispatcher rs=request.getRequestDispatcher("login.jsp"); rs.forward(request, response); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }
}
//自動(dòng)登錄方法
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 進(jìn)行判斷 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){//如果正確 登陸成功 跳轉(zhuǎn)至主界面 response.sendRedirect(request.getContentType()+"/MainStation.jsp"); }else{//如果不正確 清除Cookie 請(qǐng)求轉(zhuǎn)發(fā) 回到當(dāng)前界面 //清除Cookie中的數(shù)據(jù) Cookie coo=new Cookie("auto",""); coo.setMaxAge(0); coo.setPath("/"); response.addCookie(coo); //登陸失敗 request.setAttribute("error", "用戶名或密碼錯(cuò)誤"); 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()
}