0


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

一,掌握请求转发

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

请求转发更倾向于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 {
    @Override
    protected 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)
  1. Cookie类的常用方法:
  • String getName()
  • 返回cookie的名称,在创建后名称不能改变
  • void setValue(String value)/String getValue()
  • 设置/返回cookie的值
  • void setMaxAge(int age)
  • 设置cookie的最大值(秒)
  1. 其他常用方法
  • 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/19
  Time: 10:31
  To 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的代码

标签: 前端

本文转载自: https://blog.csdn.net/2302_80464795/article/details/143059909
版权归原作者 Exclusive_Cat 所有, 如有侵权,请联系我们删除。

“Web保存状态的手段(请求转发,Cookie的使用)”的评论:

还没有评论