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()
}