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 说明是自动登录请求 执行自动登录方法
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);//获取表单中发来的数据的方法 并且将数据封装到(UserInfo)user中
try {
boolean flag=UserInfoService.getInstance().findUserPw(user);//先判断用户账号密码是否正确
if(flag){//如果正确 下面看是否点击了自动登陆复选框
//获取自动登录复选框的值
String autologin=request.getParameter("autologin");
if("1".equals(autologin)){//如果点击了复选框 那么向Cookie中 存入用户的用户名和密码
//cookie中存储数据
Cookie c=new Cookie("auto",user.getUsername()+","+user.getPassword());
c.setMaxAge(606024);
c.setPath("/");
response.addCookie(c);//将数据加入浏览器额Cookie中
}else{//如果没选择复选框 那么 清除cookie中的数据
Cookie c=new Cookie("auto","");
c.setMaxAge(0);
c.setPath("/");
response.addCookie(c);
}
response.sendRedirect("MainStation.jsp");//登陆成功后跳至主界面
}else{//如果账号密码错误 则登陆失败 则请求转发 重新回到本界面
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数组 for(Cookie c:cookie){ //遍历数组 String name=c.getName(); //获取元素的name String value=c.getValue(); //获取元素的value if("auto".equals(name)){ //如果有auto的name 进行判断 if(value!=null&&!"".equals(value)){ //如果value值不为空 向下执行 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 请求转发 回到当前界面 //清除Cookie中的数据 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()
}