在我们浏览网页的时候,经常会看到自己曾经浏览过的网页的具体的一些信息,那这些究竟是通过什么来实现的呢?难道是有人在监视我们的电脑吗?其实不是的,实现这一功能就是利用了我们接下来看到的cookie技术。cookie本身其实就是保存在我们浏览器客户端的一个txt 文件,每次我们打开相应的额浏览网页就会自动的调用这个问价,然后查看练得具体的内容,然后你就可以看到自己的浏览记录了。

相对比而言,有客户端的信息保存,当然也会有服务器端的信息保存了,但是二者实现的原理不同,而且其功能也不相同。下面让我们先对比一些二者的不同之处:

Session是保存在服务器端的的用户信息内容,保存的信息的类型是Object类型,也就是java中最为常见的类。热切这些信息会随着会话(也就是客户端与服务器之间的交互)的结束就会销毁,虽然它保存的是比较重要的信息。

而Cookie则是在客户端保存信息,保存的信息的数据类型是String类型,最重要的是Cookie可以长期的保存在客户端中,其实你也可以自己手动设置Cookie的生存周期,以及是否要在客户端写进Cookie,当然咯,使用Cookie保存信息终究是不安全的,所以一般只用它来保存一些不重要的信息。

那么闲话不多说,让我们开始用代码说话吧。

首先我们需要一个浏览器页面,我们用jsp来实现。原理就是制作一个表单,显示我们要填写的信息,然后又增加了一个判断是否勾选了checkbox,以减去手动输入用户名及密码的步骤,过程中有可能出现中文乱码的情况,所以我们加上了java.net.*包下的解码函数URLDecoder.encode(String,"字符编码集")代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<%@ page import="java.net.*"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Login Jsp PaFfge</title>

</head>

<body>

    <br>

    <%

        request.setCharacterEncoding("utf-8");

        String username = "";

        String password = "";

        Cookie[] cookies = request.getCookies();

        if (cookies != null && cookies.length > 0) {

            for (Cookie c : cookies) {

                if (c.getName().equals("username")) {

                    username = URLDecoder.decode(c.getValue(), "utf-8");

                }

                if (c.getName().equals("password")) {

                    password = URLDecoder.decode(c.getValue(), "utf-8");

                }

            }

        }

    %>

    <br>

    <form name="loginForm" action="dologin.jsp" method="post">

        <table>

            <tr>

                <td>用户名:</td>

                <td><input type="text" name="username" value="<%=username%>" /></td>

            </tr>

            <tr>

                <td>密码:</td>

                <td><input type="password" name="password"

                    value="<%=password%>" /></td>

            </tr>

            <tr>

                <td colspan="2"><input type="checkbox" name="isUseCookie"

                    checked="checked" />十天内记住我的登录状态</td>

            </tr>

            <tr>

                <td colspan="2" align="center"><input type="submit" value="登录" /><input

                    type="reset" value="取消" /></td>

            </tr>

        </table>

    </form>

</body>

</html>

做好了登陆界面,那么我们当然需要一个处理登陆界面的逻辑了,于是dologin.jsp就派上了用场,其主要的功能就是生成Cookie和删去Cookie,分别对应变淡中是否勾选了checkbox的两种情况代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

    <%@ page import="java.net.*" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>DoLogin jsp Page</title>

</head>

<body>

    <h1>登录成功</h1>

    <hr>

    <br>

    <br>

    <br>

    <%

       request.setCharacterEncoding("utf-8");

       //首先判断用户是否选择了记住登录状态

       String[] isUseCookies = request.getParameterValues("isUseCookie");

       if(isUseCookies!=null&&isUseCookies.length>0)

       {

          //把用户名和密码保存在Cookie对象里面

          String username = URLEncoder.encode(request.getParameter("username"),"utf-8");

          //使用URLEncoder解决无法在Cookie当中保存中文字符串问题

          String password = URLEncoder.encode(request.getParameter("password"),"utf-8");

          

          Cookie usernameCookie = new Cookie("username",username);

          Cookie passwordCookie = new Cookie("password",password);

          usernameCookie.setMaxAge(864000);

          passwordCookie.setMaxAge(864000);//设置最大生存期限为10天

          response.addCookie(usernameCookie);

          response.addCookie(passwordCookie);

       }

       else

       {

          Cookie[] cookies = request.getCookies();

          if(cookies!=null&&cookies.length>0)

          {

             for(Cookie c:cookies)

             {

                if(c.getName().equals("username")||c.getName().equals("password"))

                {

                    c.setMaxAge(0); //设置Cookie失效

                    response.addCookie(c); //重新保存。

                }

             }

          }

       }

    %>

    <a href="users.jsp" target="_blank">查看用户信息</a>

</body>

</html>

从上面我们看到了一个超链接,指向的就是我么用Cookie记录的用户的信息,需要注意的是,我们创建Cookie的时候用的编码集一定要和解码时的一致,否则只能得到乱码,那么代码如下:

<%@page import="java.net.URLDecoder"%>

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Users JSP Page</title>

</head>

<body>

    <h1>User Info</h1>

    <%

        request.setCharacterEncoding("utf-8");

        String username = "";

        String password = "";

        Cookie[] cookies = request.getCookies();

        if (cookies != null && cookies.length > 0) {

            for (Cookie c : cookies) {

                if (c.getName().equals("username")) {

                    username = URLDecoder.decode(c.getValue(), "utf-8");

                }

                if (c.getName().equals("password")) {

                    password = URLDecoder.decode(c.getValue(), "utf-8");

                }

            }

        }

    %>

    <br>

    <br> UserName:<%=username%>

    Password:<%=password%>

</body>

</html>

好了,以上就是我们的代码的全部内容了,接下来让我们看一下具体的展示界面吧:

JSP之Cookie的实现的更多相关文章

  1. jsp中cookie的一个报错

    写项目时在一个jsp页面中使用了cookie,用逗号分隔的数据,服务器老报错,搞了一个小时,终于清楚了,jsp的cookie中不能使用逗号. cookie规则:这个规则用于jsp.asp中(下面这两句 ...

  2. jsp 入门 cookie session

    Java Server Page ==> 服务器端的动态页面资源.用来做显示的功能. JSP构成 ==> HTML 脚本代码 标签构成. JSP 原理 ==> 实际上就是 servl ...

  3. jsp利用cookie记住用户名,下次登录时显示在文本框中(仅仅一个Cookie就整了将近三个小时,⊙﹏⊙b汗)

    <%@page import="java.net.URLDecoder"%> <%@page import="sun.security.util.Len ...

  4. JSP之Cookie

    Cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器,通过使用cookie可以标识用户身份,记录用户名和密码,跟踪重复等. 首先创建index.jsp: <%@page import ...

  5. 【JSP】Cookie的使用及保存中文,并用Cookie实现购物车功能

    Cookie是服务器存放在客户端的一些数据,比如密码,以及你曾经访问过的一些数据. 设置Cookie //设置cookie Cookie cookie = new Cookie("TOM&q ...

  6. JSP获取Cookie对象

    cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器的.通过使用cookie可以标识用户身份,记录用户和密码,跟踪重复用户等.浏览器将cookie以key/value的形式保存到客户机的某 ...

  7. jsp使用cookie自动登录

    Login.jsp <%@ page language="java" import="java.util.*" pageEncoding="ut ...

  8. JSP(4)—Cookie创建及简单案例(自动登录)

    Cookie的创建: 创建一个JSP页面,第一次访问时显示没有Cookie,正在创建,再次访问就会自动显示cookie的名称,并设置cookie过期时间 <% //在javaweb规范中使用Co ...

  9. JSP(3)—Cookie和Session

    HTTP是一个无状态的协议,web服务器无法分辨出那些请求是同一个浏览器发出的,浏览器每一次请求都是孤立的 即使HTTP1.1支持持续链接,但当用户有一段时间没有请求时,连接也会关闭. 如何实现网上的 ...

随机推荐

  1. Java不走弯路教程(前言)

    本教程的程序基于Windows开发,所以你需要有一台安装Windows操作系统的电脑. 前言本教程将带你完成Java的初学和WEB框架的开发,学完本教程,你将完成对Java的入门并且对下一步不再迷茫. ...

  2. JAVA 练习 找出素数

    package com.zhang.hello; public class Task { /** * 1. 输出打印九九乘法表 * */ public void NO1(){ for(int i=1; ...

  3. ubuntu 14.04 64位 安装Opencv3.1.0 (包含opencv_contrib模块)

    写在前边: 据官方说法,目前还不是太稳定的算法模块都在opencv_contrib里边,由于不稳定,所以不能在release版本里发行,只有在稳定以后才会放进release里边.但是这里边有很多我们经 ...

  4. Docker 自定义网桥

    除了默认的 docker0 网桥,用户也可以指定网桥来连接各个容器. 在启动 Docker 服务的时候,使用 -b BRIDGE或--bridge=BRIDGE 来指定使用的网桥. 如果服务已经运行, ...

  5. Latex:TexStudio的使用

    http://blog.csdn.net/pipisorry/article/details/54565608 Texsdudio 快捷键 The keyboard shortcuts can be ...

  6. java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener问题解决

    今天搭建SSH项目的时候出现了如下错误: 严重: Error configuring application listener of class org.springframework.web.con ...

  7. mongo 存储过程

    摘要 本文主要介绍mongo存储过程,mongo 存储过程其实就是JS方法,然后通过eval 方法来执行,但是这个方法在3.0 depreate了,也就是在未来的版本,这个功能可能不提供了.从目前的j ...

  8. activiti 数据库连接配置

    1.1.1. 前言 在activiti 动态配置 activiti 监听引擎启动和初始化(高级源码篇)一文中,我们讲解了如何动态的配置DataSource 当我们程序配置了DataSource,act ...

  9. Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)

    讲这个之前,我们先来说说get和post两种请求的区别吧!!! 1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.jsp?name=te ...

  10. java之异常处理

    异常Exception我们分为 |--RuntimeException运行期异常,我们需要修正代码 |--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过 异常有两种处理 ...