Web---Cookie技术(显示用户上次登录的时间、显示用户最近浏览的若干个图片(按比例缩放))(3)

简介: Web---Cookie技术(显示用户上次登录的时间、显示用户最近浏览的若干个图片(按比例缩放))

4、利用Cookie显示用户上次登录的时间

index.jsp:

<a href="LoginServlet">利用Cookie显示用户上次登录的时间</a>• 1

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("您最近一年是第一次访问。。。");
        }
        //无论是新旧用户,都会以最近的时间俩创建一个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();
    }
}

演示结果:

第一次访问;

image.png

再次访问:


image.png


5、利用Cookie技术显示用户最近浏览的若干个图片

index.jsp:

<a href="jsps/show.jsp">看美女--利用Cookie技术显示用户最近浏览的若干个图片</a>• 1

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技术显示用户最近浏览的若干个图片</h1>
    <a href="/myCookieWeb/jsps/show.jsp">看美女--利用Cookie技术显示用户最近浏览的若干个图片</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())){//已经有了images这个cookie
                    String imgs = c.getValue();
                    String imgStrs[] = imgs.split(",");
                    boolean booStr = false;
                    //防范点击重复的图片
                    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(","));//左包含,右不包含
                        }
                        /*//如果这样写了,最好把上面的防范重复的图片,那个添加顺序倒过来
                        //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("/");//相当于把访问权限完全放开,即所有的项目都能访问
                    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();
    }
}

演示结果:

image.png

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();
        /*
        //测试个数--火狐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字节为最大支持的单个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+" ");
            }
        }
    }
}
目录
相关文章
|
6天前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
19 1
|
10天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
41 2
|
20天前
|
人工智能 前端开发
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
|
22天前
|
存储 安全 数据库
后端技术在现代Web开发中的实践与创新
【10月更文挑战第13天】 本文将深入探讨后端技术在现代Web开发中的重要性,通过实际案例分析展示如何利用先进的后端技术提升用户体验和系统性能。我们将从基础架构设计、数据库优化、安全性保障等方面展开讨论,为读者提供清晰的指导和实用的技巧。无论是新手开发者还是经验丰富的技术人员,都能从中获得启发和帮助。
31 2
|
23天前
|
机器学习/深度学习 移动开发 JavaScript
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
106 0
|
10天前
|
监控 前端开发 JavaScript
前端技术探索:构建高效、可维护的Web应用
【10月更文挑战第23天】前端技术探索:构建高效、可维护的Web应用
29 0
|
24天前
|
存储 前端开发 JavaScript
CSS:现代Web设计的不同技术
【10月更文挑战第11天】 CSS:现代Web设计的不同技术
|
4天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
18 4
|
7天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
1月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
136 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
下一篇
无影云桌面