• response请求转发、重定义、cookie、session


    response:响应对象

    提供的方法:

    void addCookie(Cookie cookie);服务端向客户端增加cookie对象

    void sendRedirect(String location);throw IOExeption; :页面跳转的一种方式(重定向)

    void setContentType(String type):设置服务端的contentType类型

    以下是编写下面的登入操作时需要注意到的细节:

    1.name 属性用于在 JavaScript 中引用元素,或者在表单提交后引用表单数据。

    注意:只有设置了 name 属性的表单元素才能在提交表单时传递它们的值。

    2.java equals方法和==的区别

    用"=="来比较,这种比较是针对两个String类型的变量的引用,也就是说如果两个String类型的变量,它们所引用同一个String对象(即指向同一块内存堆),则"=="比较的结果是true。

    用Object对象的equals()方法来比较,String对象继承自Object,并且对equals()方法进行了重写。两个String对象通过equals()方法来进行比较时,其实就是对String对象所封装的字符串内容进行比较,也就是说如果两个String对象所封装的字符串内容相同(包括大小写相同),则equals()方法将返回true。

     
    1、登入
    index.jsp->register.jsp->success.jsp
    重定向会导致数据丢失
     
                                请求转发             重定向
    地址栏是否改变       不变register.jsp    改变success.jsp
    是否保留第一次
     
    请求时的数据           保留                   不保留

    请求的次数              1                         2

    跳转发生的位置        服务端                 客户端发出的第二次跳转

    重定向:

    服务端从客户端拿到数据,第一次响应给客户端,客户端指向新的跳转地址success.jsp

    客户端发出第二次请求request,success.jsp响应给客户端

    请求转发:

    客户端第一次请求request,服务端拿到数据,请求转发给success.jsp,success.jsp响应给客户端

    index.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.Date" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
      <form action="register.jsp" method="post">
        用户名:<input type="text" name="uname"/><br/>
        密码:<input type="password" name="upwd"/><br/>
        <input type="submit" value="submit">
      </form>
      </body>
    </html>

    register.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <%
        //设置编码
        request.setCharacterEncoding("utf-8");
        String name=request.getParameter("uname");
        String pwd=request.getParameter("upwd");
        if(name.equals("z")&&pwd.equals("z"))
        {
            response.sendRedirect("success.jsp");//导致数据丢失
            //request.getRequestDispatcher("success.jsp").forward(request,response);
        }
    %>
    <br/>
    </body>
    </html>

    success.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>title</title>
    </head>
    <body>
    登入成功!!
    <%
        //out.print(request.getParameter("uname"));
        String name=request.getParameter("uname");
        out.print(name);
    %>
    </body>
    </html>

    2.session(服务端)

    Cookie(客户端,不是内置对象) Cookie是由 服务端生成的,再发送给客户端保存

    相对于 本地缓存的作用:客户端->服务端

    就比如你看一个hello.mp4,第一次看的时候由服务端生成,并发送给客户端,第二次再看的时候本地已经有保留

    作用:提高访问服务端的效率,但是安全性较差

    Cookie:name=value

    public Cookie(String name,String value)

    String getName() 获取name

    String getValue() 获取value

    void  setMaxAge(int expiry); 最大有效期(秒)

    服务端准备Cookie

    response.addCookie(Cookie cookie)

    页面跳转(转发、重定向)

    客户端获取cookie: request.getCookies();

    注意:

    1.服务端增加cookie:response对象,客户端获取对象:request对象

    2.不能直接获取某一个单纯对象,只能一次性将全部的cookie拿到

    使用cookie实现记住用户名和密码

    建议cookie只保存 英文数字,否则需要进行编码、解码

    session 会话

    浏览网站 开始-关闭

    购物 浏览、付款、退出

    电子邮件 浏览、写邮件、退出

    开始-结束

    session机制:

    客户端第一次请求服务端时,服务端会产生一个session对象(用于保存该客户的信息)

    并且每个session对象 都会有一个唯一的sessionID(用于区分其他session)

    服务端 会产生一个cookie,并且 该cookie的name=JSESSIONID,value=服务端sessionID的值:

    然后 服务端会在 响应客户端的同时 将该cookie发送给客户端,客户端就有了一个cookie(JSESSION)

    因此,客户端的cookie就可以和服务端的sessionID一一对应(JSESSIONID-sessionID)

    客户端第二/n次请求服务端时:服务端会先用客户端cookie中的JSESSIONID 去服务端的session中匹配sessionid,如果匹配成功,说明此用户不是第一次登入,无需登入

    session方法:

    getId():获取sessionId

    boolean isNew():判断是否是新用户

    void invalidate():使session失效(退出登入、注销)

    void setAttribute()

    Object getAttribute()

    void setMaxInactiveInterval(秒):设置最大有效非活动时间

    int getMaxInactiveInterval(): 获取最大有效 非活动时间

    request:只在同一次请求有效

    地址栏回车(发出第二次请求)

    如果点击F5刷新,则浏览器会自动重复刚才的行为

  • 相关阅读:
    javac 命令行使用总结
    电脑右键菜单的编辑(注册表操作)
    C++ —— 类模板的分离式编译
    命令行学习备份
    浏览器老是自动跳出广告垃圾网页
    SQL 事务
    Python中MySQL插入数据
    Python给数字前固定位数加零
    selenium+python3 鼠标事件
    mysql与mongodb命令对比
  • 原文地址:https://www.cnblogs.com/zuiaimiusi/p/11470611.html
Copyright © 2020-2023  润新知