1.1 举例 : 在线用户 我们做一个新手级的在线用户列表, 原理是这样 : 1. 用户登录, 并把登录使用的用户名保存到 session 中, 通过 session 中 是否存在用户名判断用户是否已登录 session 可以在整个会话过程中保存用户信息, 不必每次刷新页面都重新 登录 2. 用户登

Similar documents
09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises)

实验六 JSP/Servlet

RUN_PC連載_10_.doc

第一章

Page 2 of 12

<D2B0D0C4D3C5D1C52DC8CED6BEC7BF202D20BCC7CAC2B1BE>

秘密大乘佛法(下)

國立臺東高級中學102學年度第一學期第二次期中考高一國文科試題

!! :!!??!!?!??!!!... :... :'?'?! :' ' :'?' :'?' :'!' : :? Page 2

Microsoft Word - Sunday

鎶ョ焊0

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

上 海 农 商 银 行 理 财 产 品 风 险 揭 示 书 理 财 资 金, 则 客 户 面 临 产 品 期 限 延 期 调 整 等 风 险 8. 信 息 传 递 风 险 : 上 海 农 商 银 行 将 按 照 本 说 明 书 有 关 信 息 公 告 的 约 定, 进 行 产 品 信 息 披 露 客

(譯本)

天仁期末個人報告1.PDF

untitled

Microsoft Word - PHP7Ch01.docx

untitled

untitled

设计模式 Design Patterns

目 录 第 一 部 分 档 案 局 概 况 一 主 要 职 责 二 部 门 决 算 单 位 构 成 第 二 部 分 档 案 局 2016 年 度 部 门 预 算 表 一 2016 年 度 市 级 部 门 收 支 预 算 总 表 二 2016 年 度 市 级 部 门 支 出 预 算 表 三 2016

2015 年 度 收 入 支 出 决 算 总 表 单 位 名 称 : 北 京 市 朝 阳 区 卫 生 局 单 位 : 万 元 收 入 支 出 项 目 决 算 数 项 目 ( 按 功 能 分 类 ) 决 算 数 一 财 政 拨 款 一 一 般 公 共 服 务 支 出 二

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******


1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

基于CDIO一体化理念的课程教学大纲设计

西交利物浦校园无线网络 使用手册 XJTLU Campus Wireless User Guide

《linux从入门到精通》实验指导第三讲:文件及目录操作

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt

07-form

1 请求跳转及转发 1.1 举例 : 页面流转 可以在首页选择自己喜欢的颜色, 进入对应的页面 选择绿色, 会进入绿色界面 : 选择红色, 会进入红色界面 :

BIBLID (2002) 91:1 pp XML [1] [ 2 Portal Site ] [ 3 ] PChome Online [ 4 ] [5] [ 1 ]

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

WebEx 一键集成 1 文档目的 Web 集成 URL API 语法 启会 加会 调用 移动集成 wbx schema 调用 取得 sessionticket...4

Microsoft PowerPoint - P766Ch09.ppt

在所有的项目开发中, 一定是多人协作的团队开发, 但是使用框架就会出现一个问题, 我们所 有的 Action 以及相关的路径都要求在我们的 struts.xml 文件中配置, 如果所有的人去修改一个 文件, 那么就会变得混乱, 而且有可能出现冲突, 那么在 struts.xml 文件中为了解决这个问

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

eZiosuite


untitled

當母親禱告時

设计模式 Design Patterns

Perl

PowerPoint プレゼンテーション

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 access_token=access_token (http

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

2.4 Selenium Python Selenium Selenium Selenium Selenium pip install selenium Chrome WebDriver Google Chrome (Linux, Mac, Windows) Chrome WebDriv

2G1.S2

96年第2次勘誤( 新增)

untitled

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

epub 61-2

Chapter 09 專題 : 網站留言版 Python - Django

浪潮集团信息化文案

说 : 荀 子 极 偏 驳, 只 一 句 性 恶, 大 本 已 失 5 朱 熹 说 : 荀 扬 不 惟 说 性 不 是, 从 头 到 底 皆 不 识 6 采 取 的 都 是 这 种 理 论 框 架 另 一 种 理 论 框 架 始 于 20 世 纪 前 期, 这 便 是 诸 子 学 研 究 的 框 架

Ellen G. White Writings

PowerPoint 演示文稿

(CIP) Web /,. :, ISBN X.W T P393.4 CIP (2004) Web ( ) ( / ) : * 787

Microsoft Word 样章.dot

Chapter V.S. PC

互動網頁技術系列課程 HTML與CSS網站基礎設計 [12pt]

p.2 1 <HTML> 2 3 <HEAD> 4 <TITLE> </TITLE> 5 </HEAD> 6 7 <BODY> 8 <H3><B> </B></H3> 9 <H4><I> </I></H4> 10 </BODY> </HTML> 1. HTML 1. 2.

chap07.key

untitled

安 徽 蓝 皮 书 社 会 济 的 快 速 发 展 ; 文 化 惠 民 工 程 的 实 施, 推 动 了 文 化 产 业 持 续 繁 荣 ; 对 民 生 工 程 的 重 视, 保 障 了 安 徽 社 会 的 和 谐 稳 定 与 此 同 时, 安 徽 仍 然 存 在 经 济 总 量 不 大 城 乡 居

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

untitled

5-1 nav css 5-2

Stateless Session Beans(无状态bean)的学习

恒 生 指 數 有 限 宣 佈 指 數 檢 討 結 果 / 2 3. 恒 生 綜 合 大 型 股 / 中 型 股 指 數 恒 生 綜 合 大 型 股 / 中 型 股 指 數 成 份 股 將 有 以 下 的 變 動, 成 份 股 數 目 將 由 239 隻 增 加 至 247 隻 173 嘉 華 國

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

ii Vue Bootstrap 4 ES 6 Vue Vue Bootstrap 4 ES 6 Vue 2 vue html vue html vue Vue HTML 5 CSS ES 6 HTML 5 CSS Visual Studio Code h

昭英,

FIT)

What Servlet

Microsoft Word - 01.DOC

Microsoft Word - Ch06.docx

RUN_PC連載_8_.doc

<4D F736F F D20B1E7BAD1A9FA2EAA4CABDBA7C22EBC42A87CC6462EC0B9A767AE622EC1E9A7BBAB475F6F6B5F2E646F63>

untitled

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

最新执法工作手册(九十八)

在Spring中使用Kafka:Producer篇

北京东方润泽生态科技股份有限公司

060522達文西密碼_全_.PDF

Microsoft Word _ doc

《linux从入门到精通》实验指导第三讲:文件及目录操作

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

17 Chapter Video/Audio API 17-1 <video> <audio> 17-2 <video> <audio>

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数


Microsoft Word - 日本赈灾志愿者手册.doc

第一章 章标题-F2 上空24,下空24

需 求 拉 动 显 著 利 润 分 配 或 向 上 游 倾 斜 二 季 度 伊 始, 从 小 盘 题 材 向 大 盘 蓝 筹 的 风 格 转 换, 似 乎 刚 刚 开 始 就 又 戛 然 而 止 我 们 认 为, 虽 然 没 有 充 分 证 据 表 明 整 体 经 济 持 续 过 热, 但 局 部

拦截器(Interceptor)的学习

Office Office Office Microsoft Word Office Office Azure Office One Drive 2 app 3 : [5] 3, :, [6]; [5], ; [8], [1], ICTCLAS(Institute of Computing Tech

個 人 的 手, 拉 著 瞎 子 的 手 把 他 帶 往 村 外 的 時 候, 對 於 瞎 子 來 講, 那 個 人 的 手 和 耶 穌 的 手 有 沒 有 區 別? 沒 有! 為 什 麼 沒 有 區 別? 因 為 對 於 一 個 瞎 子 來 說, 手 和 耳 朵 就 是 他 接 觸 世 界, 瞭

Transcription:

1.1 举例 : 在线用户 我们做一个新手级的在线用户列表, 原理是这样 : 1. 用户登录, 并把登录使用的用户名保存到 session 中, 通过 session 中 是否存在用户名判断用户是否已登录 session 可以在整个会话过程中保存用户信息, 不必每次刷新页面都重新 登录 2. 用户登录后, 将用户名添加到 application 中的在线用户列表 用 户注销时, 讲用户名从 application 中的在线列表删除

只要服务器还在运行着,application 就会保存所有登录用户的信息, 所 有用户都可以看到这个在线用户列表 看如下的例子 : 1. 进入登录页面, 登陆一个用户 Index.jsp 2. 登录成功既看到已登录的用户名, 和当前的在线用户列表 Result.jsp 3. 再登录一个用户. 4. 然后就可以看到在线用户列表增加了, 可以看到里面包含上次登录的用户 和当前登录的用户

这时, 如果第一个用户刷新页面, 也会看到在线用户列表中变成两个人

5. 现在任何一个用户点击注销, 将返回登录页面 另一个用户刷新页面会发 现在线用户列表减少了 让我们从登录页面 index.jsp 开始, 复习一下目前学到的知识 index.jsp 中显示的是用户登录表单, 为了显示 index.jsp 中包含的中文, 需要加上 @ page contenttype="text/html; charset=utf-8", 这里使用的文件编码是默认的 utf-8 index.jsp <form action="login.jsp" method="post"> 用户名 :<input type="text" name="username" /> <br /> <input type="submit" value=" 登录 " /> </form> 在这个 form 里我们可以输入一个 username 的值, 提交的 url 是 login.jsp, 使用 post 方法是为了更简单的解决中文问题 在填写了用户名之后, 点击登录 按钮, 将数据提交到 login.jsp login.jsp 中进行的是对用户名的操作, 包括获得请求中的用户名, 将用户名添 加到 session 和在线用户列表中

Login.jsp @ page import="java.util.*" request.setcharacterencoding("utf-8"); // 取得登录的用户名 String username = request.getparameter("username"); // 把用户名保存进 session session.setattribute("username", username); // 把用户名放入在线列表 List onlineuserlist = (List) application.getattribute("onlineuserlist"); // 第一次使用前, 需要初始化 if (onlineuserlist == null) { onlineuserlist = new ArrayList(); application.setattribute("onlineuserlist", onlineuserlist); } onlineuserlist.add(username); // 成功 response.sendredirect("result.jsp"); 中文编码设置和获得请求参数都已经熟识了 在获得在线用户列表时, 先获得 application 中的 onlineuserlist, 强制转换成 List 类型 如果 onlineuserlist 并不存在, 我们还需要先对它做初始化, 并添加到 application 里 这时有一个小技巧, 因为 onlineuserlist 已经放在 application 中了, 将 username 添加进去后, 不必再使用 setattribute() 也可以达到修改在下用户列表的效果 因为此处用到的 List 和 ArrayList 都是定义在 java.util 包内的工具类, 如果不希望写成全类名 java.util.list, java.util.arraylist 的形式, 就需要使用 @ page import="java.util.*" 做声明, 当然也可以写成 @ page import="java.util.list,java.util.arraylist", 具体情况就任君选择了

登录成功后, 使用 redirect 的方式跳转到 result.jsp 页面,result.jsp 页面中显示的是当前登录用户和在线用户列表的信息 Result.jsp @ page contenttype="text/html; charset=utf-8" import="java.util.*" <html> <head> </head> <body> <h3> 您好 :${username} [<a href="logout.jsp"> 注销 </a>]</h3> List onlineuserlist = (List) application.getattribute("onlineuserlist"); for (int i = 0; i < onlineuserlist.size(); i++) { String onlineusername = (String) onlineuserlist.get(i); <tr> <td>=onlineusername</td> </tr> } </body> </html> 先看一下页面中使用的 jsp 指令 (directive), @ page contenttype="text/html; charset=utf-8" import="java.util.*", 为了处理中文和使用 import, 可以把这两部分写在一起 显示当前登陆名时, 使用了 el 表达式 : <h3> 您好 :${username} [<a href="logout.jsp"> 注销 </a>]</h3>

显示在线用户列表的时候使用了循环 : List onlineuserlist = (List) application.getattribute("onlineuserlist"); for (int i = 0; i < onlineuserlist.size(); i++) { String onlineusername = (String) onlineuserlist.get(i); <tr> <td>=onlineusername</td> </tr> } 这里的循环体可能会令人感到费解, 其实它与下面的写法是等价的 : List onlineuserlist = (List)application.getAttribute("onlineUserList"); for (int i = 0; i < onlineuserlist.size(); i++) { String onlineusername = (String) onlineuserlist.get(i); out.println("<tr>"); out.println("<td>" + onlineusername +"</td>"); out.println("</tr>"); } 只需要理解代码的含义就可以了, 从 application 里获得 onlineuserlist, 然 后循环输出所有的用户名 application 是公用的, 所以可以看到每个登录的用 户 点击注销的时候, 会跳转到 logout.jsp, 这里负责用户注销和从在线用户列表

去除已登录用户 Logout.jsp @ page import="java.util.*" // 取得登录的用户名 String username = (String) session.getattribute("username"); // 销毁 session session.invalidate(); // 从在线列表中删除用户名 List onlineuserlist = (List)application.getAttribute("onlineUserList" ); onlineuserlist.remove(username); // 成功 response.sendredirect("index.jsp");

这次我们从 session 中获得登录名, 因为请求中没有包含任何数据 session.invalidate() 这个方法给我们提供了一条销毁 session 的捷径, 不需要一条一条删除 session 中的数据,invalidate() 会直接销毁 session,session 里边所有的数据也就消失了 在线用户列表的操作很直观, 从 application 中获得 onlineuserlist, 然后 remove(username) 就可以从中去除当前登录用户 最后使用 redirect 跳转到 index.jsp 这个登录页面 整个应用的流程也就结束了 整个应用的功能很单纯, 之所以把它叫做 新手级, 是因为它只能用于演示 等待用户去点击注销才去操作在线用户列表存在着问题, 实际使用中, 用户很可能因为个人或网络原因没有进行注销就退出系统, 这样会导致用户列表不能删除, 就这样一直增长下去

解决这个问题的方法超出了目前掌握的知识, 我们将在后面的章节进行介绍 ***