Web保存状态的手段(请求转发,Cookie的使用)

ops/2024/10/22 9:00:33/

一,掌握请求转发

请求转发与重定向技术都是跳转页面的途径,但是这两个技术之间也有不同之处。

请求转发更倾向于servlet跳转jsp,而重定向更倾向于servlet跳转到servlet。

1. 常用页面跳转方法2:请求转发(重写URL)
 RequestDispatcher接口对象允许将请求转发到其他服务器资源
2. javax.servlet.RequestDispatcher接口的常用方法
 void forward(HttpServletRequest,HttpServletResponse) throws ServletException,java.io.IOException
 说明:在服务器上转发请求到另一个资源(Servlet, JSP, HTML)
3. javax.servlet.ServletContext接口的常用方法
 RequestDispatcher getRequestDispatcher(String path)
 说明:一个RequestDispatcher对象可以用来转发请求到资源或包含在响应中的资源,资源可以是动态或静态的。
 参数说明:path-转发路径
4. 通过HttpServletRequest接口中的方法设置/获取参数
 setAttribute(String name,Object value)
 getAttribute(String name)

package csdn;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 java.io.IOException;@WebServlet("/cs")
public class CheckServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");if (RegisterServlet.map.get(username) != null & RegisterServlet.map.get(username).equals(password)) {req.getRequestDispatcher("welcome.jsp").forward(req,resp);} else {req.getRequestDispatcher("login2.jsp").forward(req,resp);}}
}

效果跟使用重定向的效果是一样的

5.重定向与请求转发对比

二,Web中保持状态的手段

1.Cookie的使用

1. 如何实现“两周内自动登录”功能?

Cookie:保存到客户端的(多是文本文件),与客户端相关,以“key-value”对的形式保存数据

  •  设置过期时间
  •  存储在硬盘上(例:IE)
  •  可以在不同的浏览器进程间共享,关闭后再次打开浏览器cookie依然有效

注:客户端可以阻止服务器写入Cookie

1. 创建Cookie:

  •  javax.servlet.http.Cookie
  •  new Cookie(name,value)

2. Cookie类的常用方法:

  •  String getName()
  •  返回cookie的名称,在创建后名称不能改变
  •  void setValue(String value)/String getValue()
  •  设置/返回cookie的值
  •  void setMaxAge(int age)
  •  设置cookie的最大值(秒)

3. 其他常用方法

  •  void addCookie(Cookie)
  •  接口HttpServletResponse中的方法
  •  响应中指定的cookie,此方法可以多次调用来设置多个cookie
  •  Cookie[] getCookies()
  •  接口HttpServletRequest中的方法
  •  读取客户端的所有Cookie,返回一个Cookie数组;如果没有cookie返回null
Map<String,String>map=new HashMap<>();map.put("admin","123");map.put("test","456");map.put("abc","xyz");//通过用户名,去map中查找密码,如果用户名存在,则可以找到,否则为空String x=map.get(u);//Set<String> k=map.keySet();if (x!=null&&x.equals(s)/*k.contains(u) && map.get(k).equals(s)*/) {//auto!=null表示勾选了自动登录if (auto!=null){//我们使用login作为cookie的键,用这个cookie来实现自动登录Cookie c=new Cookie("login",u);c.setMaxAge(60);resp.addCookie(c);}
<%--Created by IntelliJ IDEA.User: ***Date: 2024/7/19Time: 10:31To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>用户登录</title>
</head>
<body><%Cookie[] cookies = request.getCookies();if (cookies!=null){for (Cookie c:cookies){String name = c.getName();//login这个cookie是我们用来做自动登陆的,如果找到了他,说明我们之前选过自动登录并且还有效if (name.equals("login")){session.setAttribute("abc",c.getValue());response.sendRedirect("welcome.jsp?name="+c.getValue());}}}%><form action="dbCheck" method="post">用户名:<input type="text" name="userName"><br/>密码:<input type="password" name="password"><br/><input type="checkbox" name="autoLogin" value="1">两周内自动登录<input type="submit" value="登录">
</form></body>
</html>

我们要使用js在这里定义cookie数组,将自动登录的用户名和密码保存在这里

这是一段关于Cookie的代码


http://www.ppmy.cn/ops/127530.html

相关文章

求职leetcode题目(14)

1.乘积最大子数组 解题思路&#xff1a; 标签&#xff1a;动态规划遍历数组时计算当前最大值&#xff0c;不断更新令imax为当前最大值&#xff0c;则当前最大值为 imax max(imax * nums[i], nums[i])由于存在负数&#xff0c;那么会导致最大的变最小的&#xff0c;最小的变最…

列出机器学习方向的创新点

以下是机器学习方向的一些创新点: 一、算法创新 新型神经网络架构 图神经网络(Graph Neural Networks,GNNs) 传统的神经网络主要处理欧几里得空间的数据,如图像(网格结构)和序列(线性结构)。然而,现实世界中有许多数据具有图结构,如社交网络、分子结构等。图神经网…

网络空间指纹:新型网络犯罪研判的关键路径

前言 新型网络犯罪是指利用计算机技术和互联网平台进行犯罪活动的一类犯罪行为。它涵盖了一系列使用网络和数字技术进行非法活动的行为&#xff0c;如网络钓鱼、网络诈骗、恶意软件攻击、黑客入侵、数据泄露、网络色情和社交网络犯罪等。 随着当前打击治理新型网络犯罪博弈态…

【数据库系统概论】第3章 关系数据库标准语言SQL(一)数据定义(超详细)

教材&#xff1a; 数据库系统概论&#xff08;第6版&#xff09;王珊,杜小勇,陈红编著 目录 一、SQL概述 1.1 SQL 的产生与发展 1.2 SQL的特点 1.3 SQL的基本概念 二、数据定义 2.1 数据库的定义 2.2 数据表的定义 2.3 模式的定义 一、SQL概述 1974年IBM为关系DBMS设…

JavaScript的第四天

目录 一、数组的使用&#xff08;Array&#xff09; 数组&#xff1a;将一组数据存储在单个变量下的一个集合。 1、创建数组的方法: &#xff08;1&#xff09;声明一个变量&#xff0c;将一个集合赋值给一个变量&#xff0c;该方法较为便捷简单&#xff0c;使用较多 &#xff…

【【自动驾驶】车辆运动学模型】

【自动驾驶】车辆运动学模型 1. 引言2. 以车辆重心为中心的单车模型2.1 模型介绍2.2 滑移角 β \beta β 的推导2.2 航向角 ψ \psi ψ推导过程&#xff1a;2.3 滑移角 β \beta β2.3 Python代码实现2.4 C代码实现 3. 前轮驱动的单车模型3.1 模型介绍3.3 Python代码实现3.4 …

Kafka之原理解析

定义 Kafka 是一个分布式流媒体平台&#xff0c;kafka官网&#xff1a;http://kafka.apache.org/ Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统&#xff0c;最初由 LinkedIn 公司开发&#xff0c;使用Scala 语言编写&#xff0c;目前是Apache 的开源项目。 流媒体…

react18中在列表中如何使用useCallback进行渲染优化

实现的需求&#xff1a;在列表中如何缓存每个子组件&#xff0c;父组件重新渲染&#xff0c;子组件不更新&#xff0c;下面的列子假设 Chart 组件被包裹在memo 中。你希望在 ReportList 组件重新渲染时跳过重新渲染列表中的每个 Chart。但是&#xff0c;你不能在循环中调用 use…