zoukankan      html  css  js  c++  java
  • JSP九大元素之response与Cookie及其实例

    一、response:响应对象
     提供的方法
     <1>void addCookie(Cookie cookie):服务端向客户端增加cookie对象
     <2>void sendRedirect(String location) throes IOException:页面跳转的一种方式,称之为重定向
     <3>void setContentType(String type):设置服务端响应时的编码(设置服务端的ContentType类型)

     实例:登录
     login.jsp -> check.jsp->success.jsp

    使用重定向语句,会导致数据丢失response.sendRedirect("success.jsp");

     

    使用request语句跳转 request.getRequestDispatcher("success.jsp").forward(request,response);

     

    页面跳转:请求转发,可以获取数据,并且地址栏没有变(仍然保持转发时的页面check.jsp)

     请求转发与重定向的区别:
                            请求转发               重定向
     地址栏:               不变(check.jsp)        改变(success.isp)

     是否保留第一次          保留                  不保留          ---四种范围对象
     请求时的数据

     请求的次数              一次                  两次

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


     请求转发(一个来回):在服务器内部跳转,客户端向服务器发送一次请求(请求指向check.jsp),之后在服务器内部实现check.jsp->success.jsp,服务器(success.jsp)向客户端响应一次。

     客户端--->服务器A窗口--->服务器B窗口--->结束
     重定向(两个来回):在客户端向服务器发送第一次请求(请求指向check.jsp)后,服务器(check.jsp)第一次响应是指向新的跳转地址(success.jsp),之后客户端向服务器发送第二次请求(请求指向success.jsp),之后服务器(success.jsp)向客户端响应第二次。

       客户端--->服务器A窗口--->去找B
       客户端--->服务器B窗口--->结束

    二、Cookie及其实例

    因为Cookie与session关系密切,必须先了解Cookie
       Cookie(客户端,不是内置对象):由服务端生成,然后发给客户端保存(相当于本地缓存)
       作用:可以提高访问效率,但是安全性较差(将密码保存在客户端,可能被破解)。
       Cookie:name(key)=value
       由javax.servlet.http.Cookie提供
       public Cookie(String name,String value)
       String getName():获取name
       String getValue():获取value
       void setMaxage(int expiry):设置最大有效期,单位为秒

       服务端发送给客户端
       response.addCookie(Cookie cookie)(准备Cookie) + 页面重定向(转发/重定向)+ request.getCookies()(客户端获取Cookie)
       注意:
       a、服务端增加cookie:response对象;客户端获取cookie:request对象;
       b、不能获取某一个单独对象,只能一次性获取全部Cookie。
     实例1:模拟服务端向客户端发送cookie

    response_addCookie.jsp->result.jsp

    response_addCookie.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
          <%
            //服务端
            //创建cookie
            Cookie cookie1 = new Cookie("name","张志伟");
            Cookie cookie2 = new Cookie("pwd","123456");
            //添加cookie
            response.addCookie(cookie1);
            response.addCookie(cookie2);
            //页面跳转到客户端
            request.getRequestDispatcher("result.jsp").forward(request,response);
          %>
    </body>
    </html>

    result.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
              <%
                 //客户端
                 //获取全部Cookie
                Cookie [] cookies = request.getCookies();
                 //遍历全部Cookie
                for(Cookie cookie:cookies)
                {
                    out.print(cookie.getName()+"---"+cookie.getValue()+"<br/>");
                }
              %>
    </body>
    </html>

    测试结果如下图

    JSESSIONID---1E1D0822274C36D80CF50ADEDAD2CE6A为浏览器自动添加的cookie

    建议Cookie只保存 字母、数字 ,否则需要编码、解码。

     实例2:使用cookie记住用户名

    login.jsp(客户端)->check.jsp(服务端)->result.jsp(客户端,保存用户名)

    login.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    <%!
       String uname;
    %>
    <%
       boolean flag=false;
       Cookie [] cookies=request.getCookies();
       for(Cookie cookie:cookies)
       {
           if(cookie.getName().equals("name"))
           {
               uname=cookie.getValue();
               flag=true;
           }
       }
       if(!flag)
       {
           out.print("cookie已失效");
       }
       else
       {
           out.print("cookie:"+uname);
       }
    %>
    <%
       //(uname==null? "":uname) 的意义为,如果uname的值为null,则显示空格,否则就显示真正的uname,为了在第一次的时候不显示null
    %>
      <form action="check.jsp" method="post">
             用户名<input type="text" name="uname" value="<%=(uname==null? "":uname) %>"> <br/> 
             密码<input type="password" name="upwd"> <br/>
             <input type="submit" value="登录"> <br/>
      </form>
    </body>
    </html>

    check.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
           <%
              //设置编码
              request.setCharacterEncoding("utf-8");
              //获取用户名和密码
              String name=request.getParameter("uname");
              String pwd=request.getParameter("upwd");
              //将用户名加入Cookie中
              Cookie cookie =new Cookie("name",name);
              //设置cookie的存活时间为10秒
              cookie.setMaxAge(10);
              
              response.addCookie(cookie);
              //页面跳转
              response.sendRedirect("result.jsp");
           %>
    </body>
    </html>

    result.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    欢迎登陆
    </body>
    </html>

     因为浏览器会自动保存,所以此处在eclispe中做测试。

     上图是保存的cookie,过十秒后再刷新

     设置cookie的存活时间

    cookie.setMaxAge(60);//60秒的意思

    cookie.setMaxAge(60*60);//一小时

    cookie.setMaxAge(365*24*60*60);//一年

  • 相关阅读:
    DNNClassifier 深度神经网络 分类器
    浏览器对MP4视频 帧宽度 高度的兼容性
    UnicodeEncodeError:'latin-1' codec can't encode character
    文件夹下 文件计数
    the largest value you actually can transmit between the client and server is determined by the amount of available memory and the size of the communications buffers.
    the “identity” of an object
    广告特征 用户特征
    如果一个维度全覆盖,则有效维度应该对该维度全覆盖
    a high-level neural networks AP
    使用 LDA 挖掘的用户喜好主题
  • 原文地址:https://www.cnblogs.com/yeyueweiliang/p/12194221.html
Copyright © 2011-2022 走看看