Java Web实验五:Cookie和Session的使用

实验五   Cookie和Session的使用

一、实验目的

1. 熟练使用Cookie;

2. 熟练使用Session。

二、实验内容

1. 使用Cookie实现,用户第一次访问LastAccessServlet的时候,页面显示“你是首次访问本网站,当前时间为:xxx”,第n次访问时显示“欢迎回来,您上次访问时间为:xxxx”;

2. 当用户访问网站首页时,会先判断用户是否登录,如果已登录,则在首页显示用户信息,否则进入登录页面,实现用户登录功能,编写login.html文件实现用户登录页面,该页面包含用户登录表单信息,包括用户名和密码等,在登录后,如果点击登录界面的“退出”,就会注销当前用户信息,返回首页。

三、实验源代码、运行截图

LastAccessServlet.java

package xxx;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//@WebServlet("/lastAccess")
public class LastAccessServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

        // 判断是否是第一次访问,从指定的cookie数组,获取指定名称的cookie
        // 获取从浏览器带过来的所有cookie
        Cookie[] cookies = req.getCookies();
        // 从数组中找到指定名称的cookie,利用CookieUtils工具类
        Cookie cookie = CookieUtils.findCookie(cookies, "lastVisit");
        // 判断是否是第一次访问
        if (cookie == null) {
            // 是第一次访问
            // 显示到页面上一段内容
            res.setContentType("text/html;charset=UTF-8");
            Date d1 = new Date();
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
            String s1 = sdf1.format(d1);
            res.getWriter().print("<h1>你是首次访问本网站,当前时间为:"+s1+"</h1>");
        } else {
            // 不是第一次访问
            // 获得cookie中的上一次访问时间,显示到页面上
            //String getValue():获取此 Cookie 的当前值。
            String value = cookie.getValue();
            // 显示到页面上一段内容
            res.setContentType("text/html;charset=UTF-8");
            res.getWriter().print("<h1>欢迎回来,您上次访问时间为:" + value + "</h1>");
        }
        // 记录当前系统时间到cookie,回写到浏览器
        Date d = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
        String s = sdf.format(d);
        // 存入到cookie
        Cookie c = new Cookie("lastVisit", s);
        // 回写到浏览器
        res.addCookie(c);


        // 设置响应内容类型为HTML
        res.setContentType("text/html");

        // 获取PrintWriter对象以写入响应体
        PrintWriter out = res.getWriter();

        // 写入HTML内容到响应体
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>点击</title>");
        out.print("<a href='index.jsp'>");
        out.println("<title>返回主页</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>点击这里返回登录界面</h1>");
        out.println("</body>");
        out.println("</html>");

        // 刷新输出流并关闭
        out.flush();
        out.close();

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        doGet(req, res);
    }

}

CookieUtils.java

package xxx;

import javax.servlet.http.Cookie;

public class CookieUtils {
    public static Cookie findCookie(Cookie[] cookies, String name) {
        if (cookies == null) {
            // 浏览器没有携带Cookie
            return null;
        } else {
            for (Cookie cookie : cookies) {
                // 判断cookie是否是我们想要的那个cookie
                // public String getName():返回 Cookie 的名称。创建后无法更改名称。
                if (cookie.getName().equals(name)) {
                    // 直接返回cookie
                    return cookie;
                }
            }
            // 浏览器带有Cookie,但是没有指定名称的那个Cookie
            return null;
        }
    }
}

LoginServlet.java

package xxx;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

//@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        ServletConfig config=this.getServletConfig();
        String right= config.getInitParameter("账号"); // 假设name是用于验证的用户名
        String right2 = config.getInitParameter("密码"); // 假设password是用于验证的密码



        if (right.equals(username) && right2.equals(password)) {
// 登录成功,将用户信息保存到session中
            HttpSession session = request.getSession();
            session.setAttribute("username", username);
            //response.sendRedirect("index.jsp"); // 重定向到首页
            response.sendRedirect("lastAccess");
        } else {
// 登录失败,重定向回登录页面
            response.sendRedirect("login.html");
        }
    }


}

LogoutServlet.java

package xxx;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

public class LogoutServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
      



         //获取Cookies数组
        Cookie[] cookies = request.getCookies();
        // 迭代查找并清除Cookie
        for (Cookie cookie: cookies) {
            if ("lastVisit".equals(cookie.getName())) {
                cookie.setMaxAge(0);
                response.addCookie(cookie);
            }
        }
        // 销毁Session
        request.getSession().invalidate();


        // 重定向
        response.sendRedirect("index.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>LastAccessServlet</servlet-name>
        <servlet-class>xxx.LastAccessServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LastAccessServlet</servlet-name>
        <url-pattern>/lastAccess</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>xxx.LoginServlet</servlet-class>


        <init-param>
            <param-name>账号</param-name>
            <param-value>xxx</param-value>
        </init-param>
        <init-param>
            <param-name>密码</param-name>
            <param-value>2022</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>LogoutServlet</servlet-name>
        <servlet-class>xxx.LogoutServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LogoutServlet</servlet-name>
        <url-pattern>/logout</url-pattern>
    </servlet-mapping>
</web-app>

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>Home Page</title>
  </head>
  <body>

  <%
    // 获取session中的用户信息
    String username = (String) session.getAttribute("username");
    if (username != null) {
      // 用户已登录,显示用户信息
      out.println("欢迎, " + username + "!点击这里<a href='login.html'>重新登录</a>");
    } else {
      // 用户未登录,显示登录链接
      out.println("请点击 <a href='login.html'>登录</a> 登录您的账号.");
    }
  %>
  </body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login Page</title>
</head>
<body>
<form action="login" method="post">
    <label for="username">用户名:</label>
    <input type="text" id="username" name="username" required>

    <label for="password">密码:</label>
    <input type="password" id="password" name="password" required>

    <input type="submit" value="登录">
</form>
<p>点击这里<a href="logout"> 退出 </a></p>


</body>
</html>

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值