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);//一年

  • 相关阅读:
    发送带有正文以及附件的邮件
    软件测试笔记
    java开发 中台
    postman测试带有json数据格式的字段
    maven详解之仓库
    Maven与nexus关系
    占位
    Vue项目碰到"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件"报错
    了解facade设计模式
    postman使用
  • 原文地址:https://www.cnblogs.com/yeyueweiliang/p/12194221.html
Copyright © 2011-2022 走看看