欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳細(xì)學(xué)習(xí)Java Cookie技術(shù)(用戶登錄、瀏覽、訪問權(quán)限)

 更新時間:2016年08月22日 15:12:18   作者:qq_26525215  
這篇文章主要為大家詳細(xì)介紹了Java Cookie技術(shù),顯示用戶上次登錄的時間、顯示用戶最近瀏覽的若干個圖片(按比例縮放)等,感興趣的小伙伴們可以參考一下

本章文章詳細(xì)講解:
1、Cookie基本用法演示
2、演示Cookie的訪問權(quán)限
3、演示Cookie的刪除
4、利用Cookie顯示用戶上次登錄的時間
5、利用Cookie技術(shù)顯示用戶最近瀏覽的若干個圖片
6、測試火狐瀏覽器到底支持多少個Cookie和一個Cookie最大為多大

1、Cookie基本用法演示

index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 </head>

 <body>
 <h1>演示Cookie技術(shù)</h1>
 <a href="CookieDemo">Cookie基本用法演示</a><br/>

 </body>
</html>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
 xmlns="http://java.sun.com/xml/ns/javaee" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 <display-name></display-name>
 <servlet>
 <servlet-name>CookieDemo</servlet-name>
 <servlet-class>cn.hncu.servlets.CookieDemo</servlet-class>
 </servlet>

 <servlet-mapping>
 <servlet-name>CookieDemo</servlet-name>
 <url-pattern>/CookieDemo</url-pattern>
 </servlet-mapping> 
 <welcome-file-list>
 <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

CookieDemo.java:

package cn.hncu.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookieDemo extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {

 response.setContentType("text/html;charset=utf-8");
 PrintWriter out = response.getWriter();

 //向客戶端寫cookie
 Random r = new Random();
 int n =r.nextInt(100);
 String name = "jack";//cookie的格式:key=value
 Cookie c = new Cookie("name", name+n);
 c.setMaxAge(60*60);//設(shè)置過期時間,以秒為單位
 c.setPath( request.getContextPath() );//該路徑是: /項目名
 //Cookie機制中,是通過path來控制權(quán)限的。只有<url-pattern>和該path相同或是它的子路徑的servlet才能夠訪問該cookie
 //如果把一個cookie的path設(shè)為項目根目錄,那么該項目下的所有servlet都能夠訪問它
 response.addCookie(c);

 //這一段演示cookie帶中文
 String str = "我?guī)е形?;
 str = URLEncoder.encode(str, "utf-8");//中文設(shè)置編碼?。?!urlencode編碼
 Cookie cStr = new Cookie("str", str);
 //如果不設(shè)置setMaxAge,則瀏覽器一關(guān)閉就過期
 cStr.setPath("/");
 response.addCookie(cStr);

 //讀取客戶端發(fā)過來的cookie
 Cookie cs[] = request.getCookies();//讀取cookie
 if(cs!=null){//防范一下
  for(Cookie cc:cs){
  String name2 = cc.getName();
  String val = cc.getValue();
  val = URLDecoder.decode(val, "utf-8");//原來是怎么編碼的,就怎么解碼! 中文解碼,ascii是原樣的!
  out.print(name2+"="+val+"<br/>");
  }
 }

 out.print("Cook保存成功!");
 }

}

演示結(jié)果:

第一次點擊時!session下次講!tomcat自動生成發(fā)給客戶端的!

再次進入時!
name+n–因為后面的n一直在隨機生成,這個點擊總是顯示的是前一個的信息!

2、演示Cookie的訪問權(quán)限

index.jsp:

<a href="servlet/CookieDemo2">演示Cookie的訪問權(quán)限</a><br/>

web.xml:

<servlet>
 <servlet-name>CookieDemo2</servlet-name>
 <servlet-class>cn.hncu.servlets.CookieDemo2</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>CookieDemo2</servlet-name>
 <url-pattern>/servlet/CookieDemo2</url-pattern>
 </servlet-mapping> 

 CookieDemo2.java:

package cn.hncu.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CookieDemo2 extends HttpServlet {


 public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
 response.setContentType("text/html;charset=utf-8");
 PrintWriter out = response.getWriter();

 //向客戶端寫Cookie
 Random r = new Random();
 int n =r.nextInt(100);
 Cookie c = new Cookie("age", ""+n);
 c.setMaxAge(60*60);//過期時間
 c.setPath( request.getContextPath()+"/servlet/CookieDemo2" );//Cookie機制中,是通過path來控制權(quán)限的
 //由于CookieDemo的url-pattern是項目根目錄/CookieDemo,不是當(dāng)前cookie所設(shè)路徑的子目錄,因此無法訪問到該cookie

 //注意?。?!path不一樣,那么cookie是不同的對象,也就是不會覆那個名字相同的cookie!
 response.addCookie(c);

 //讀取從客戶端發(fā)來的cookie
 Cookie cs[] = request.getCookies();
 if(cs!=null){
  for(Cookie cc:cs){
  String name = cc.getName();
  String val = cc.getValue();
  out.print("22222--"+name+"="+val+"<br/>");
  }
 }
 out.print("Cookie保存成功!");

 }
}

演示結(jié)果:

先進入CookieDemo2的頁面,能訪問到CookieDemo的name-cookie

再進入CookieDemo的頁面,不能訪問到CookieDemo2的age-cookie

3、演示Cookie的刪除

index.jsp:

<a href="servlet/DelCookieDemo"> 演示Cookie的刪除 </a><br/>

web.xml:

<servlet>
 <servlet-name>DelCookieDemo</servlet-name>
 <servlet-class>cn.hncu.servlets.DelCookieDemo</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>DelCookieDemo</servlet-name>
 <url-pattern>/servlet/DelCookieDemo</url-pattern>
 </servlet-mapping>

DelCookieDemo.java:

package cn.hncu.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DelCookieDemo extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {

 response.setContentType("text/html;charset=utf-8");
 PrintWriter out = response.getWriter();
 Cookie cs[] = request.getCookies();
 if(cs!=null){
  for(Cookie c:cs){
 //要想遍歷到"name"這個cookie,當(dāng)前servlet必須要有讀的權(quán)限,即servlet的url-pattern必須是該cookie所設(shè)路徑或者是其所設(shè)路徑的子路徑
  //刪除name這個cookie
  if("name".equals(c.getName())){
   c.setPath( request.getContextPath() );//刪除時是通過這一句來判斷權(quán)限的!這里必須和原來所設(shè)的路徑完全一樣才能刪除,否則不能刪除!
   //對于上句,我的個人理解是:因為如果你這個路徑設(shè)置不同了,其實只是相當(dāng)與新開了一個cookie,這個新cookie的到期時間是0,name是"name"

   c.setMaxAge(0);//到期時見設(shè)為0,即是刪除---此處只是設(shè)置刪除標(biāo)識
   response.addCookie(c);
  }
  }
 }
 }
}

演示結(jié)果:

這個時候,name還存在的。

我們訪問DelCookieDemo.

再去第一個鏈接看:

name已經(jīng)沒有了!

火狐會自動刪除過期的cookie:

4、利用Cookie顯示用戶上次登錄的時間

index.jsp:

<a href="LoginServlet">利用Cookie顯示用戶上次登錄的時間</a>

web.xml:

 <servlet>
 <servlet-name>LoginServlet</servlet-name>
 <servlet-class>cn.hncu.servlets.LoginServlet</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>LoginServlet</servlet-name>
 <url-pattern>/LoginServlet</url-pattern>
 </servlet-mapping>

LoginServlet.java:

package cn.hncu.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {


 public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {

 response.setContentType("text/html;charset=utf-8");
 PrintWriter out = response.getWriter();
 out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
 out.println("<HTML>");
 out.println(" <HEAD><TITLE>演示利用Cookie顯示用戶上次登錄的時間</TITLE></HEAD>");
 out.println(" <BODY>");

 //讀取客戶端的cookie
 Cookie cs[] = request.getCookies();
 boolean boo = false;
 if(cs!=null){
  for(Cookie c:cs){
  //遍歷
  if("loginTime".equals(c.getName())){
   String val =c.getValue();
   long dt = Long.parseLong(val);
   Date d = new Date(dt);
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
   out.print("您上次登錄時間是:"+sdf.format(d));
   boo=true;
   break;
  }
  }
 }
 if(boo==false){//表示之前1年沒有訪問記錄!因為下面我們保存的過期時間是一年
  out.print("您最近一年是第一次訪問。。。");
 }

 //無論是新舊用戶,都會以最近的時間倆創(chuàng)建一個Cookie,寫到客戶端。原來有了的,就是更新時間
 Date d = new Date();
 Cookie c = new Cookie("loginTime", ""+d.getTime() );
 c.setPath(request.getContextPath());
 c.setMaxAge(60*60*24*30*12);
 response.addCookie(c);

 out.println(" </BODY>");
 out.println("</HTML>");
 out.flush();
 out.close();
 }

}

演示結(jié)果:

第一次訪問;

再次訪問:

5、利用Cookie技術(shù)顯示用戶最近瀏覽的若干個圖片

index.jsp:

<a href="jsps/show.jsp">看美女--利用Cookie技術(shù)顯示用戶最近瀏覽的若干個圖片</a>

web.xml:

 <servlet>
 <servlet-name>ShowServlet</servlet-name>
 <servlet-class>cn.hncu.servlets.ShowServlet</servlet-class>
 </servlet>
<servlet-mapping>
 <servlet-name>ShowServlet</servlet-name>
 <url-pattern>/showImg</url-pattern>
 </servlet-mapping>

show.jsp:

<%@page import="java.io.File"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <style type="text/css">
 .span{
  border:0px solid #000;
  width:100px; 
  height:100px;
  overflow:hidden;
 }
 .span img{
  max-width:100px;
  _width:expression(this.width > 100 ? "100px" : this.width);
 }
 .spans{
  border:0px solid #000;
  width:50px; 
  height:50px;
  overflow:hidden;
 }
 .spans img{
  max-width:50px;
  _width:expression(this.width > 50 ? "50px" : this.width);
 }

 </style>

 </head>

 <body>
 <h1>看美女--利用Cookie技術(shù)顯示用戶最近瀏覽的若干個圖片</h1>

 <a href="/myCookieWeb/jsps/show.jsp">看美女--利用Cookie技術(shù)顯示用戶最近瀏覽的若干個圖片</a>
 <h3>最近瀏覽的圖片:</h3>

 <!-- 添加最近3次瀏覽的圖片 -->
 <%
 String str =null;
 Cookie cs[] = request.getCookies();
 if(cs!=null){
  for(Cookie c:cs){
  if("images".equals(c.getName())){
   str=c.getValue();// ***.jpg
   break;
  }
  }
 }
 if(str!=null){
  String strs[] = str.split(",");
  for(String s:strs){
  %>
   <span class="spans">
   <img src="<%=request.getContextPath()%>/imgs/<%=s%>" />
   </span> 
  <%
  }
 }
 %>

 <br/><hr/><br/>

 <% 
 //利用file遍歷所有的圖片,顯示出來。
 String path = getServletContext().getRealPath("/imgs");
 //System.out.printf(path);//D:\apache-tomcat-7.0.30\webapps\myCookieWeb\jsps
 File file = new java.io.File(path);
 File[] files = file.listFiles();
 if(files!=null){
 %>

 <%
 for(File f:files){
  String imgName = f.getName();
  %>
  <span class="span">
   <a href="<%=request.getContextPath() %>/showImg?img=<%=imgName %>">
   <img src="<%=request.getContextPath()%>/imgs/<%=imgName%>" />
   </a>
  </span>
  <%
 }
 %>

 <%

 }
 %>

 </body>
</html>


 

ShowServlet.java:

package cn.hncu.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ShowServlet extends HttpServlet {


 public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {

 response.setContentType("text/html");
 PrintWriter out = response.getWriter();
 out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
 out.println("<HTML>");
 out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
 out.println(" <BODY>");

 String img = request.getParameter("img");
 String imgStr = "<img src='"+request.getContextPath()+"/imgs/"+img+"'/>";
 out.print(imgStr);

 //用Cookie記錄用戶訪問過的圖片信息
 Cookie cs[] = request.getCookies();
 boolean boo = false;
 if(cs!=null){
  for(Cookie c:cs){
  if("images".equals(c.getName())){//已經(jīng)有了images這個cookie
   String imgs = c.getValue();
   String imgStrs[] = imgs.split(",");
   boolean booStr = false;
   //防范點擊重復(fù)的圖片
   for(int i=0;i<imgStrs.length;i++){
   if(imgStrs[i].equals(img)){
    if(i==1&&imgStrs.length==2){
    imgs=imgStrs[i]+","+imgStrs[0];
    }else if(i==2&&imgStrs.length==3){
    imgs=imgStrs[i]+","+imgStrs[0]+","+imgStrs[1];
    }else if(i==2&&imgStrs.length==3){
    imgs=imgStrs[i]+","+imgStrs[0]+","+imgStrs[1];
    }
    booStr=true;
    break;
   }
   }
   if(!booStr){

   imgs = img+","+imgs;//采用如下方式會麻煩一點:imgs+","+img
   if(imgs.split(",").length>3){//如果訪問的圖片超過3次了
    imgs = imgs.substring(0, imgs.lastIndexOf(","));//左包含,右不包含
   }

   /*//如果這樣寫了,最好把上面的防范重復(fù)的圖片,那個添加順序倒過來
   //imgs+","+img 方式:
   imgs = imgs+","+img;
   if(imgs.split(",").length>3){//如果訪問的圖片超過3次了
    imgs = imgs.substring(imgs.indexOf(",")+1, imgs.length());
   }
   */
   }
   c.setValue(imgs);//更新
   c.setMaxAge(60*60*24*30);
   c.setPath("/");//相當(dāng)于把訪問權(quán)限完全放開,即所有的項目都能訪問
   response.addCookie(c);
   boo=true;
   break;
  }
  }
 }
 if(boo==false){//表示首次訪問,即瀏覽器中沒有圖片瀏覽的cookie
  Cookie c = new Cookie("images", img);
  c.setMaxAge(60*60*24*30);
  c.setPath("/");
  response.addCookie(c);
 }


 out.println(" </BODY>");
 out.println("</HTML>");
 out.flush();
 out.close();
 }

}


 

演示結(jié)果:

6、測試火狐瀏覽器到底支持多少個Cookie和一個Cookie最大為多大

index.jsp:

<a href="servlet/HowManyCookieServlet">測試火狐瀏覽器到底支持多少個Cookie和一個Cookie最大為多大 </a><br/>

web.xml:

 <servlet>
 <servlet-name>HowManyCookie</servlet-name>
 <servlet-class>cn.hncu.servlets.HowManyCookie</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>HowManyCookie</servlet-name>
 <url-pattern>/servlet/HowManyCookieServlet</url-pattern>
 </servlet-mapping>

HowManyCookie.java:

package cn.hncu.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HowManyCookie extends HttpServlet {


 public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
 PrintWriter out = response.getWriter();

 /*
 //測試個數(shù)--火狐47.0.1 最大支持110個
 for(int i=1;i<=110;i++){
  Cookie c = new Cookie("textNum"+i, ""+i);
  c.setMaxAge(60*15);
  c.setPath("/");
  response.addCookie(c);
 }
 */

 //測試大小 ---4092字節(jié)為最大支持的單個cookie存儲
 String s ="";
 for(int i=0;i<4092;i++){
  s+="1";
 }
 Cookie c = new Cookie("test", s);
 c.setMaxAge(60*15);
 c.setPath("/");
 response.addCookie(c);

 Cookie cs[] = request.getCookies();//讀取cookie
 if(cs!=null){//防范一下
  for(Cookie cc:cs){
  String key = cc.getName();
  String val = cc.getValue();
  out.print(key+"="+val+" ");
  }
 }

 }

}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java基于websocket協(xié)議與netty實時視頻彈幕交互實現(xiàn)

    Java基于websocket協(xié)議與netty實時視頻彈幕交互實現(xiàn)

    本文主要介紹了Java基于websocket協(xié)議與netty實時視頻彈幕交互實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • MyBatis動態(tài)SQL foreach標(biāo)簽實現(xiàn)批量插入的方法示例

    MyBatis動態(tài)SQL foreach標(biāo)簽實現(xiàn)批量插入的方法示例

    這篇文章主要介紹了MyBatis動態(tài)SQL foreach標(biāo)簽實現(xiàn)批量插入的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 詳解DES加密算法及在Java程序中的使用示例

    詳解DES加密算法及在Java程序中的使用示例

    這篇文章主要介紹了詳解DES加密算法及在Java程序中的使用示例,文中還有一個用Java實現(xiàn)的DES三重加密的例子,需要的朋友可以參考下
    2016-04-04
  • 解決idea打包成功但是resource下的文件沒有成功的問題

    解決idea打包成功但是resource下的文件沒有成功的問題

    這篇文章主要介紹了解決idea打包成功但是resource下的文件沒有成功的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Jenkins自動化部署springboot代碼實例

    Jenkins自動化部署springboot代碼實例

    這篇文章主要介紹了Jenkins自動化部署springboot代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Java中的==使用方法詳解

    Java中的==使用方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中的==使用方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • springboot 加載 META-INF/spring.factories方式

    springboot 加載 META-INF/spring.factories方式

    這篇文章主要介紹了springboot 加載 META-INF/spring.factories方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 詳解eclipse項目中.classpath文件的使用

    詳解eclipse項目中.classpath文件的使用

    這篇文章主要介紹了詳解eclipse項目中.classpath文件的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • SpringCloud服務(wù)的發(fā)現(xiàn)與調(diào)用詳解

    SpringCloud服務(wù)的發(fā)現(xiàn)與調(diào)用詳解

    在Java微服務(wù)越來越火的今天。幾乎什么公司都在搞微服務(wù)。而使用的比較多的就是Spring?Cloud技術(shù)棧。今天就來研究一下Spring?Cloud中服務(wù)發(fā)現(xiàn)與調(diào)用的基本原理
    2022-07-07
  • JAVA WSIMPORT生成WEBSERVICE客戶端401認(rèn)證過程圖解

    JAVA WSIMPORT生成WEBSERVICE客戶端401認(rèn)證過程圖解

    這篇文章主要介紹了JAVA WSIMPORT生成WEBSERVICE客戶端401認(rèn)證過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10

最新評論