index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <h1>我的网站</h1><hr> <% //获取session中的登录状态 String user = (String)session.getAttribute("user");//这里的 user是session的标记 %> <% if(user == null || "".equals(user)){//用户没有登录 %> 欢迎光临!游客! <a href="${pageContext.request.contextPath }/loginout/login.jsp">登录</a> <a href="#">注册</a> <% }else{//用户登录过 %> 欢迎回来!<%=user %>! <a href="${pageContext.request.contextPath }/servlet/LogoutServlet">注销</a> <% } %> </body> </html>
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <h1>我的网站-登录</h1><hr> <form action="${pageContext.request.contextPath }/servlet/LoginServlet" method="POST"> 用户名:<input type="text" name="username"/> 密码:<input type="password" name="password"/> <input type="submit" value="登录"/> </form> </body> </html>
LoginServlet.java
1 package com.itheima.session.loginout; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class LoginServlet extends HttpServlet { 11 12 public void doGet(HttpServletRequest request, HttpServletResponse response) 13 throws ServletException, IOException { 14 request.setCharacterEncoding("utf-8");//对于17,18行起作用!!! 15 response.setContentType("text/html;charset=utf-8");//对27行起作用!!! 16 //1.获取用户名密码 17 String username = request.getParameter("username"); 18 String password = request.getParameter("password"); 19 //2.查询数据库检查用户名密码 20 if(UserDao.valiNamePsw(username, password)){ 21 //3.如果正确登录后重定向到主页 22 request.getSession().setAttribute("user", username);//设置session标记user 23 response.sendRedirect(request.getContextPath()+"/loginout/index.jsp"); 24 return; 25 }else{ 26 //4.如果错误提示 27 response.getWriter().write("用户名密码不正确!"); 28 } 29 } 30 31 public void doPost(HttpServletRequest request, HttpServletResponse response) 32 throws ServletException, IOException { 33 doGet(request, response); 34 } 35 36 }
UserDao.java
1 package com.itheima.session.loginout; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 public class UserDao { 7 private UserDao() {//工具类的构造方法私有化 8 } 9 private static Map <String,String>map = new HashMap<String, String>();//因为验证的信息是用户名、密码,可以用key、value
的形式,想到用map语法 10 static{//类加载,静态代码块执行 11 map.put("张三丰", "111"); 12 map.put("张翠山", "999"); 13 map.put("张无忌", "888"); 14 map.put("赵敏", "777"); 15 } 16 public static boolean valiNamePsw(String username,String password){ 17 return map.containsKey(username) && map.get(username).equals(password); 18 } 19 }
LogoutServlet.java
1 package com.itheima.session.loginout; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class LogoutServlet extends HttpServlet { 11 12 public void doGet(HttpServletRequest request, HttpServletResponse response) 13 throws ServletException, IOException { 14 //1.杀死session 15 //request.getSession()底层的实现,如果发现没有session立即创建 16 if(request.getSession(false)!=null //如果没有对应的session,返回null,不会创建session 17 && request.getSession().getAttribute("user")!=null){ 18 // request.getSession(false)!=null && request.getSession().getAttribute("user")!=null 表示有sesson,并且有登录标记 19 request.getSession().invalidate(); 20 } 21 //2.重定向到主页 22 response.sendRedirect(request.getContextPath()+"/loginout/index.jsp"); 23 } 24 25 public void doPost(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException { 27 doGet(request, response); 28 } 29 30 }