首先提一下http协议的无状态性。指的是server不会记住已经给它发过请求的client。

每次收到请求都会觉得是一个新的client发过来的。

(即:server不会记住给他发过请求的client)。

所以这个时候我们就须要使用Cookie来保存用户的状态。

Cookie指webserver保存在client的一系列文本信息。比方:判定注冊用户是否已经登陆站点、网购购物车的处理等。所以消耗的是client的存储空间。

Session是通过server来保持状态的,是server端为client所开辟的存储空间。

所以消耗的是server端的存储空间。

1、保存用户的状态的两大机制:cookie和session。

a 、cookie作用:

1.对特定对象的追踪 

2.保存用户网页浏览记录与习惯

3.简化登录

不足的是安全风险:easy泄露用户信息

b、session的作用

在创建了Session的同一时候,server会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来又一次获得已经创建的Session;在Session被创建之后。就能够调用Session相关的方法往Session中添加内容了,而这些内容仅仅会保存在server中,发到client的仅仅有Session id;当client再次发送请求的时候。会将这个Session id带上,server接受到请求之后就会根据Session id找到对应的Session。从而再次使用之。

正是这样一个过程。用户的状态也就得以保持了。

2、Cookie的经常使用的方法

创建Cookie对象: Cookie newCookie = new Cookie(String key,Object value);

写入cookie对象: response.addCookie(newCookie);

读取Cookie对象: Cookie[] cookies = request.getCookies();

设置Cookie对象的有效期(秒): setMaxAge()

创建Cookie后进行赋值: setValue(String value)

获取Cookie的名称: getName()

获取Cookie的值: getValue()

获取Cookie的有效期(秒): getMaxAge()

3、以下给出一个Cookie的JSP实例。

login.jsp中使用一个checkbox来进行记录是否记住登陆状态。然后在dologin.jsp进行创建cookie。而且设置cookie的值和向server加入cookie实例、设置cookie对象的存活时间等。

在dologin.jsp中会有超链接的存在。用于连接users.jsp。

在users.jsp界面会显示刚刚在登陆界面输入的username和password。

这里通过checkbox是否被勾选来推断是否须要创建Cookie。

程序的逻辑是checkbox的被选上就创建Cookie。

首先是登陆界面login.jsp:

  1. <%
  2. //获取Cookie实例对象中的元素值
  3. Cookie[] cookie=request.getCookies();
  4. String username="";
  5. String password="";
  6. if(cookie!=null && cookie.length>0){
  7. for(Cookie c:cookie){
  8. if(c.getName().equals("username")){
  9. username=c.getValue();
  10. }
  11. if(c.getName().equals("password")){
  12. password=c.getValue();
  13. }
  14. }
  15. }
  16. %>
  17. <body>
  18. <h1>用户登录</h1>
  19. <hr>
  20. <form name="loginForm" action="dologin.jsp" method="post">
  21. <table>
  22. <tr>
  23. <td>用户名:</td>
  24. <td><input type="text" name="username" value="<%=username %>"/></td>
  25. </tr>
  26. <tr>
  27. <td>密码:</td>
  28. <td><input type="password" name="password" value="<%=password %>" /></td>
  29. </tr>
  30. <tr>
  31. <td colspan="2"><input type="checkbox" name="isUseCookie" checked="checked"/>十天内记住我的登录状态</td>
  32. </tr>
  33. <tr>
  34. <td colspan="2" align="center"><input type="submit" value="登录"/><input type="reset" value="取消"/></td>
  35. </tr>
  36. </table>
  37. </form>
  38. </body>
  1. <span style="font-family: Arial, Helvetica, sans-serif;">dologin.jsp代码例如以下:</span>
  1. <span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html" style="color: rgb(20, 25, 30);"><span style="font-family: Arial, Helvetica, sans-serif;"> <body></span>
  1.  
  1. <h1>登录成功</h1>
  2. <hr>
  3. <br>
  4. <br>
  5. <br>
  6. <%
  7. //首先推断用户是否记住了登陆状态
  8. String[] isUseCookie = request.getParameterValues("isUseCookie");
  9. if(isUseCookie!=null && isUseCookie.length>0){
  10. //将username与password保存到Cookie中
  11. String username=request.getParameter("username");
  12. String password=request.getParameter("password");
  13.  
  14. //定义Cookie对象
  15. Cookie usernameCookie=new Cookie("username",username);
  16. Cookie passwordCookie=new Cookie("password",password);
  17. //设置Cookie对象的有效时间
  18. usernameCookie.setMaxAge(864000);//10天
  19. passwordCookie.setMaxAge(864000);//10天
  20.  
  21. //向server中加入Cookie
  22. response.addCookie(usernameCookie);
  23. response.addCookie(passwordCookie);
  24. }
  25. else{
  26. //检查之前是否有cookie存在
  27. Cookie[] cookie=request.getCookies();
  28. if(cookie!=null && cookie.length>0){
  29. //遍历Cookie
  30. for(Cookie c:cookie){
  31. if(c.getName().equals("username")|| //假设出现username和password的Cookie
  32. c.getName().equals("password")){
  33. c.setMaxAge(0);//将该cookie的时间设为0
  34. response.addCookie(c);//又一次将Cookie加入到server中
  35. }
  36. }
  37. }
  38. }
  39. %>
  40. <a href="users.jsp" target="_blank">查看用户信息</a>
  41.  
  42. </body>

users.jsp

结果显示:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

不选择checkbox时的结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

1、JSP经常使用的有page、include、taglib指令这三种指令

page:位于页面顶端,一个页面能够包括多个page指令。

include:将一个外部文件嵌入jsp中,同一时候解析这个页面中的jsp语句。

taglib:使用标签库,自己定义新的标签。在jsp中启动定制行为。

a、include指令 

语法 <% include file="地址"%>。

案例:显示当前时间的页面。过程例如以下:

(1)写一个仅仅输出时间的方法的date.jsp。

(2)用于显示的页面,须要包括<% include file="date.jsp"%>这句。

实例代码:

date.jsp

  1. <%
  2. //创建一个日期的实例
  3. Date d=new Date();
  4. SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
  5. String s=sdf.format(d);
  6. out.println(s);
  7. %>

inculde_command.jsp

  1. <body>
  2. <h1>include指令的測试</h1><br>
  3. <%@ include file="date.jsp"%>
  4. </body>

结果显演示样例如以下:

5、include动作(动作标签)

<jsp:include page="URL" flush="true/false" />

page :要包括的页面

flush :被包括的页面是否从缓冲区读取

代码实例:

include_action.jsp

  1. <body>
  2. <h1>include动作的測试</h1><br>
  3. <jsp:include page="date.jsp" flush="false"></jsp:include>
  4. </body>

6、include指令和动作的比較:

include指令

jsp:include动作

语法格式

<%@ include file=””%>

<jsp:include page=””>

发生作用的时间

页面转换期间

请求期间

包括的内容

文件的实际内容

页面的输出

转换成Servlet

主页面和包括页面转换成一个Servlet

主页面和包括转换为独立的Servlet

编译时间

较慢-资源必须被解析

较快

运行时间

稍快

较慢-每次资源必须被解析

JSP学习笔记七之Cookie的更多相关文章

  1. JSP学习笔记(七十八):struts2中s:select标签的使用

    1.第一个例子: <s:select list="{'aa','bb','cc'}" theme="simple" headerKey="00& ...

  2. JSP学习笔记

    JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...

  3. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  4. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  5. java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象

     JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...

  6. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  7. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  8. python3.4学习笔记(七) 学习网站博客推荐

    python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...

  9. Go语言学习笔记七: 函数

    Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...

随机推荐

  1. vue中axios发送post请求,后端(@RequestParam)接不到参数

    遇到的问题描述 :axios post 请求,后端接收不到参数. 我们的接口是java,用@RequestParam来接收前端的参数 解决方案:使用qs:axios中已经包含有qs,所以无需重新安装, ...

  2. linux通用makefile文件

    OUTPUT_DLL := libmy.so LIBS :=-L../public/lib/x64/linux -lzookeeper_mt -lcurl \ -lfreetype -lopencv_ ...

  3. [bzoj2806][Ctsc2012]Cheat(后缀自动机(SAM)+二分答案+单调队列优化dp)

    偷懒直接把bzoj的网页内容ctrlcv过来了 2806: [Ctsc2012]Cheat Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1943   ...

  4. 关于C/C++的一些思考(4)

    C++的类型转换规则: 对于数值类型而言:当一个较小数值类型赋值给一个较大数值类型的时候,C++支持隐式的类型转换,不会有任何的损失: 对于数值类型而言,当一个较大数值类型赋值给一个较小数值类型时候, ...

  5. [Python3网络爬虫开发实战] 7-动态渲染页面爬取

    在前一章中,我们了解了Ajax的分析和抓取方式,这其实也是JavaScript动态渲染的页面的一种情形,通过直接分析Ajax,我们仍然可以借助requests或urllib来实现数据爬取. 不过Jav ...

  6. winform ComboBox/TextBox自动提示

    ComboBox和TextBox控件都带有自动前缀匹配,只要设置其中的AutoCompleteMode,AutoCompleteSource,AutoCompleteCustomSource三个属性的 ...

  7. 【01】《响应式Web设计:HTML5和CSS3实战》

    [01]   (魔芋:已看完.) [01]<响应式Web设计:HTML5和CSS3实战>(全).pdf 共246页.   2013年1月出版.   读后感:适合入门的书籍,对于响应式布局, ...

  8. poj 1986tarjan模板题

    #include<iostream> #include<vector> using namespace std; const int N=40010; int pre[N];/ ...

  9. [bzoj2882]工艺_后缀数组

    工艺 bzoj-2882 题目大意:题目链接. 注释:略. 想法: 跟bzoj1031差不多啊. 把串倍长后扫$sa$数组. 最后再统计答案即可. Code: #include <iostrea ...

  10. [bzoj3712][PA2014]Fiolki_倍增LCA

    Fiolki bzoj-3712 PA-2014 题目大意:题目链接. 注释:略. 想法: 神题! 我们建树:对于一次倾倒操作,我们弄一个新的大瓶子作为两个合并瓶子的父亲节点,与两个瓶子相连. 对于一 ...