回顾及作业点评:

(1)JSP如何处理客户端的请求?

使用response对象处理响应

(2)请描述转发与重定向有何区别?

转发是在服务器端发挥作用,通过forward方法将提交信息在多个页面间进行传递。客户端浏览器的地址栏不会显示出转向后的地址

重定向是在客户端发挥作用,通过请求新的地址实现页面转向,在地址栏中可以显示转向后的地址

(3)JSP如何实现数据库访问?

使用JDBC访问数据库

预习检查:
(1)除了request对象和response对象,JSP还包括哪些内置对象?
1、Cookie  2、session是JSP内置对象   3、application对象
(2)Cookie的作用?
1、对特定对象的追踪   2、统计网页浏览次数  3、简化登录

(3)请说明session对象与application对象的区别?
在一次会话范围内容有效,在会话期间与session绑定的对象皆属于该范围
在一个应用服务器范围内有效,当应用服务启动后即创建该对象,并向所有用户所共享

本章目标

掌握Cookie的原理及应用

掌握session的原理及应用

掌握application的原理及应用

本章任务

一、使用Cookie实现保存已访问的信息

(1)什么是Cookie?

Cookie是Web服务器保存在客户端的一系列文本信息

Cookie的作用

对特定对象的追踪

统计网页浏览次数

简化登录

安全性能 容易信息泄露

(2)Cookie的语法

第一步:导入包
import="javax.servlet.http.Cookie" 第二步:创建Cookie
Cookie newCookie=new Cookie("parameter", "value");
parameter:用于代表cookie的名称(key)
value:用于表示当前key名称所对应的值 第三步:写入Cookie
response.addCookie(newCookie)

(3)设置Cookie属性的常用方法

类型          方法名称                  说  明
void setMaxAge(int expiry) 设置Cookie的有效期,以秒为单位 void setValue(String value) 在Cookie创建后,对Cookie进行赋值 String getName() 获取Cookie的名称 String getValue() 获取Cookie的值 String getMaxAge() 获取Cookie的有效时间,以秒为单位
案例:
------从登录验证页面表单中获取用户名------
<%
String username=reqeust.getParameter("username");
//以key/value的形式创建Cookie
创建Cookie,使用response的addCookie方法保存Cookie Cookie uname=new Cookie("uname", username);
response.addCookie(uname);
... ...
%>
-----在显示页面显示用户名---------------
<%//获取请求中的Cookie,以数组方式保存
使用reqeust获取Cookie数组,通过cookie的名称获取对应的内容 Cookie cookies[ ]=request.getCookies();
//循环遍历数组,得到key=uname的Cookie
for(int i=0;i<cookies.length;i++){
Cookie ucookie=cookies[i];
if(ucookie.getName().equals("uname”));//判断Cookie的名称
%>
欢迎你:<%=ucookie.getValue() %>//获取key对应的value,输出显示
<% } %>

二、使用session对象实现页面访问控制

(1)如图:

(2)什么是会话?
一个会话就是浏览器与服务器之间的一次通话,包含浏览器与服务器之间的多次请求、响应过程

(3)JSP内置对象session

(4)session与窗口的关系
一个session对应一个窗口,那么通过超链接打开的窗口是否也是新的session呢?
答案:不是
每个session对象都与浏览器一一对应 重新开启一个浏览器,相当于重新创建一个session对象重新开启一个IE窗口,直接访问系统首页面
通过超链接打开的新窗口,新窗口的session与其父窗口的session相同

(5)使用session实现访问控制

在控制页面获取用户请求的登录信息进行验证
------登录处理页面的代码片断------
<%
if (rs.next()) { //如果是已注册用户
在session中存放用户登录信息 session.setAttribute("LOGINED_USER", loginedUser);
response.sendRedirect("index.jsp");
} else {
response.sendRedirect("login.html");
}
%> --如果session中不存在该用户的登录信息,转入登录页面-- <%
User user = (User) session.getAttribute("LOGINED_USER");
if (user == null) {
response.sendRedirect("login.jsp");
}
%>

(6)include指令
除了首页面,其它页面中同样需要加入登录验证,       有没有办法避免冗余代码的出现?
可以将一些共性的内容写入一个单独的文件中,然后通过include指令引用该文件,从而降低代码的冗余问题,也便于修改共性内容

案例:创建登录验证文件 loginControl.jsp
<%@ page import="org.jbit.bean.User"%>
<%
User user = (User) session.getAttribute("LOGINED_USER");
if (user == null) {
response.sendRedirect("login.html");
}
%>
在后台首页面中使用include指令引用登录验证文件
<%@ include file="loginControl.jsp" %>

(7)Cookie与session的比较
session是在服务器端保存用户信息,Cookie是在客户端保存用户信息
session中保存的是对象,Cookie保存的是字符串
session随会话结束而关闭,Cookie可以长期保存在客户端
Cookie通常用于保存不重要的用户信息,重要的信息使用session保存

三、使用application对象实现统计在线人数

(1)JSP内置对象application

application类似于系统的“全局变量”,用于实现用户之间的数据共享 application对象的常用方法:

void setAttribute(String key, Object value):以键/值的方式,将一个对象的值存放到application中 application.setAttribute("LOGINED_USER", new ArrayList());

Object getAttribute(String key):根据键去获取application中存放对象的值

if (application.getAttribute("LOGINED_USER") != null) {       List loginedUsers = (List) application.getAttribute("LOGINED_USER"); }

(2)application对象

(3)实现访问人数统计2-1

创建登录处理页面
------登录处理页面代码片断------
if (rs.next()) {
User logineduser = new User(name, pass);
session.setAttribute("LOGINED_USER", logineduser);
List loginedUsers = new ArrayList(); //访问者列表
if (application.getAttribute("LOGINED_USER") != null)
loginedUsers = (List) application.getAttribute("LOGINED_USER");
loginedUsers.add(logineduser); //把新登录用户的信息存入访问者列表中
application.setAttribute("LOGINED_USER", loginedUsers);
response.sendRedirect("index.jsp");
}
创建已访问人数统计页面 ------已访问人数统计页面代码片断------
<% List loginedUsers = new ArrayList(); //访问者列表
if (application.getAttribute("LOGINED_USER") != null)
loginedUsers = (List) application.getAttribute("LOGINED_USER");
%>
目前,有<%=loginedUsers.size()%>人已经访问过本网站!<br><br>

(4)JSP内置对象的范围

Java_Web之状态管理的更多相关文章

  1. Redux状态管理方法与实例

    状态管理是目前构建单页应用中不可或缺的一环,也是值得花时间学习的知识点.React官方推荐我们使用Redux来管理我们的React应用,同时也提供了Redux的文档来供我们学习,中文版地址为http: ...

  2. 表格搞定 Asp.net Web 状态管理

    最近在网上搜罗了 ASP.NET WEB 状态管理方面的一些内容,终于把这些内容整合总结了一下. 1. 希望自己通过整理,能够掌握一些,为自己投资. 2. 以便自己忘记,又要浪费时间搜罗. 3. 希望 ...

  3. [译]面向初学者的Asp.Net状态管理技术

    介绍 本文主要讲解Asp.Net应用程序中的状态管理技术(Asp.Net中有多种状态管理技术),并批判性地分析所有状态管理技术的优缺点. 背景 HTTP是无状态的协议.客户端发起一个请求,服务器响应完 ...

  4. [Asp.Net]状态管理(Session、Application、Cache)

    上篇博文介绍了在客户端状态管理的两种方式:http://www.cnblogs.com/wolf-sun/p/3329773.html.除了在客户端上保存状态外,还可以在服务器上保存状态.使用客户端的 ...

  5. [Asp.Net]状态管理(ViewState、Cookie)

    简介 HTTP协议是无状态的.从客户端到服务器的连接可以在每个请求之后关闭.但是一般需要把一些客户端信息从一个页面传送给另一个页面. 无状态的根本原因是:浏览器和服务器使用Socket通信,服务器将请 ...

  6. HttpClient_HttpClient 4.3.6 HTTP状态管理

    HTTP状态管理 最初的HTTP被设计成以状态.请求/应答为导向的协议,它被制作成是没有特殊条款的,以便在状态会话中能交换逻辑关系请求/应答.HTTP协议越来越受欢迎和被采用,越来越多的系统会在应用程 ...

  7. Ansible状态管理

     转载自:http://xdays.me/ansible状态管理.html 简介 就像所有服务器批量管理工具(puppet有DSL,salt有state)一样,ansible也有自己的状态管理组件 ...

  8. ASP.NET状态管理详解,让你明明白白

    开发WinFrom的程序员可能不会在意维护应用程序的状态,因为WinFrom本身就在客户端运行,可以直接在内存中维护其应用程序状态.但ASP.NET应用程序在服务器端运行,客户端使用无状态的http协 ...

  9. 状态管理cookie 案例

    1状态管理:服务器为了追踪同一个客户端发出的请求,将多次交互看成一个整体看待 2:cookie的生存时间,默认情况下,cookie保存在浏览器内存中,只要不关闭浏览器,cookie就一直存在 如果希望 ...

随机推荐

  1. Eclipse集成Maven的Web工程demo(独立及Maven集成tomcat)

    用到的工具JDK1.8Eclipse Luna j2eeEclipse 集成的Mavetomcat7 (集成在xampp中的独立web服务器,或者通过Maven plugin集成web服务器) 步骤如 ...

  2. Marshal.ReleaseComObject() vs. Marshal.FinalReleaseComObject()

    很简单,不翻译了. If you are using COM components on your .NET code, you might be already aware of the Marsh ...

  3. Linux 实用指令(4)

    目录 实用指令 1.指定运行级别 2.切换到指定运行级别的指令 3.帮助指令 3.1man获得帮助信息 3.2help指令 4.文件目录类 4.1pwd指令 4.2 ls指令 4.3 cd指令 4.4 ...

  4. unigui的session【1】

    目前是1394. 明白session如何使用管理,看demo Session List和SessionTimeout unit Main; interface uses Windows, Messag ...

  5. Cookie的Python爬虫应用

    Cookie的Python爬虫应用 目录 Cookie是什么 Cookie的作用 Cookie的内容 domain属性 path属性 expires/Max-Age属性 Cookie的爬虫应用 Coo ...

  6. [luoguP1993] 小 K 的农场(差分约束 + spfa 判断负环)

    传送门 差分约束系统..找负环用spfa就行 ——代码 #include <cstdio> #include <cstring> #include <iostream&g ...

  7. 【ACM】hdu_1004_Let the Balloon Rise_201308141026-2

    Let the Balloon RiseTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  8. mysql 源码 王恒 [mysql数据结构+mysql 执行计划]

    http://blog.chinaunix.net/uid/26896862/cid-156733-list-1.html http://www.it168.com/redian/wangheng/

  9. ACdream 1112 Alice and Bob (博弈&amp;&amp;素数筛选优化)

    题目链接:传送门 游戏规则: 没次能够将一堆分成两堆 x = a*b (a!=1&&b!=1)x为原来堆的个数,a,b为新堆的个数. 也能够将原来的堆的个数变成原来堆的约数y.y!=x ...

  10. UVA10254 - The Priest Mathematician(找规律)

    UVA10254 - The Priest Mathematician(找规律) 题目链接 题目大意:4根柱子的汉诺塔. 解题思路:题目里面有提示,先借助四个柱子移走k个,然后在借助三个柱子移走剩余的 ...