登录用户缓存试验

登录页面 login.jsp
校验用户 LoginServlet.java
登录成功 succ1.jsp

只是小实验,所以没有连接数据库。

首先,登录页面是一个简单的提交表单。

   <h1>大写的登陆h1><br/>
   <font color="red"><b><%=message %>b>font>
   <form action="/day_11-3/LoginServlet" method="post">
    用户: <input type="text" name="username" value="<%=uname %>"/><br/>
        
    密码: <input type="password" name="password"/><br/>
   <input type="submit" value="登录"/>
   form>

这是用户输入错误时,返回的错误信息:

   <%
    String message = "";
   String msg = (String)request.getAttribute("msg");//获取错误信息
   if(msg != null){
       message = msg;
   }
   %>

然后,用户如果登录成功一次,在下次访问该登录页面会有用户名缓存,通过cookie来实现:

<%-- 读取cookies --%>
   <%
    String uname = "";  //先将字符串设置为空
    Cookie[] cs = request.getCookies();//获取请求中所有的cookies
    if(cs != null){
        for(Cookie c : cs){   //遍历cookies
            if("uname".equals(c.getName())){ //查找名为name的cookie
                uname = c.getValue(); //获取他的值
            }
        }
    }
   %>

下来我们看一下LoginServlet,
这里要注意字符编码问题,所以我们直接设置为utf-8

request.setCharacterEncoding("utf-8");

接下来,获取表单参数:

//获取参数
        String username = (String)request.getParameter("username");
        String password = (String)request.getParameter("password");

验证用户:假设只有当用户名为 zhangsan,密码为111时才正确。

if("zhangsan".equals(username) && "111".equals(password)){
            //登陆成功

            //把用户名保存到cookie中,发给客户端
            Cookie cookie = new Cookie("uname",username);
            cookie.setMaxAge(60*60*24);//保存一天
            response.addCookie(cookie);

            /*
             * 3.保存用户信息到session中
             * 4.重定向到succ1.jsp
             */
            HttpSession session = request.getSession();
            session.setAttribute("username", username);
            response.sendRedirect("/day_11-3/session2/succ1.jsp");

        }else{//登录失败
            /*
             * 5.保存错误信息到request域中
             * 6.转发到login.jsp
             */
            request.setAttribute("msg", "用户名或密码错误");
            RequestDispatcher qr = request.getRequestDispatcher("/session2/login.jsp");
            qr.forward(request,response);

        }

我们来看看效果:
登录用户缓存试验_第1张图片

首先来看登录错误时的样子,我们随便输入一个用户名和密码:
登录用户缓存试验_第2张图片

提示错误:
登录用户缓存试验_第3张图片

这次输入 zhangsan, 111,登录成功
登录用户缓存试验_第4张图片

我们再关闭浏览器,重新访问登录页面:
登录用户缓存试验_第5张图片

这里,我们要注意一下,cookie不能有中文

还有一种情况,是用户直接访问登录成功的页面,我们会判定用户是否已经登录,如果没有,则返回到登录页面。

 String username = (String)session.getAttribute("username");
  if(username == null) {
     out.print("");
     out.print("请您先登录");
     out.print("");
      return;
  }

如图:
登录用户缓存试验_第6张图片

这里还有一个succ2页面,即当用户登录成功,服务器会创建一个session,在会话过程中,用户访问其他页面,不用重新登录。

代码和succ1一样
登录用户缓存试验_第7张图片

以下是源代码:

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'login.jsp' starting pagetitle>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    

  head>

  <body>
   <h1>大写的登陆h1><br/>
   <%-- 读取cookies --%>
   <%
    String uname = "";
    Cookie[] cs = request.getCookies();//获取请求中所有的cookies
    if(cs != null){
        for(Cookie c : cs){   //遍历cookies
            if("uname".equals(c.getName())){ //查找名为name的cookie
                uname = c.getValue(); //获取他的值
            }
        }
    }
   %>
   <%
    String message = "";
   String msg = (String)request.getAttribute("msg");//获取错误信息
   if(msg != null){
       message = msg;
   }
   %>

   <font color="red"><b><%=message %>b>font>
   <form action="/day_11-3/LoginServlet" method="post">
    用户: <input type="text" name="username" value="<%=uname %>"/><br/>
    
    密码: <input type="password" name="password"/><br/>
    <input type="submit" value="登陆"/>
   form>

  body>
html>

LoginServlet.java

package cn.itcast.servlet;

import java.io.IOException;

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 javax.servlet.http.HttpSession;

public class LoginServlet extends HttpServlet {


    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /*
         * 1.获取表单数据
         */
        //处理中文问题
        request.setCharacterEncoding("utf-8");
        //获取参数
        String username = (String)request.getParameter("username");
        String password = (String)request.getParameter("password");
        /*
         * 2.验证用户名和密码是否正确
         */
        if("zhangsan".equals(username) && "111".equals(password)){
            //登陆成功

            //把用户名保存到cookie中,发给客户端
            Cookie cookie = new Cookie("uname",username);
            cookie.setMaxAge(60*60*24);//保存一小天
            response.addCookie(cookie);

            /*
             * 3.保存用户信息到session中
             * 4.重定向到succ1.jsp
             */
            HttpSession session = request.getSession();
            session.setAttribute("username", username);
            response.sendRedirect("/day_11-3/session2/succ1.jsp");

        }else{//登录失败
            /*
             * 5.保存错误信息到request域中
             * 6.转发到login.jsp
             */
            request.setAttribute("msg", "用户名或密码错误");
            RequestDispatcher qr = request.getRequestDispatcher("/session2/login.jsp");
            qr.forward(request,response);

        }
    }

}

succ1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>


<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'succ1.jsp' starting pagetitle>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    

  head>

  <body>
   <h1>succ1h1>
  <%
   //这里是从网址直接访问登录成功的页面,会先判定是否是登录进来的
  String username = (String)session.getAttribute("username");
  if(username == null) {
      //重定向到登录页面
      //request.setAttribute("msg", "您还没有登录,请先登录");
     // request.getRequestDispatcher("/session2/login.jsp").forward(request, response);

    //给用户一个登录链接
     out.print("/day_11-3/session2/login.jsp\">");
     out.print("请您先登录");
     out.print("");
      return;
  }
  %>
  <%=username %>您好,欢迎登陆

  body>
html>

你可能感兴趣的:(JavaWeb)