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

posted @ 2020-01-14 21:37  夜月薇凉映银弩  阅读(599)  评论(0编辑  收藏  举报