第 5 课 JSP 页面的访问控制.  掌握访问控制实现的流程  掌握 JSP 内置对象的用法 session 对象 application 对象  掌握 include 指令  掌握如何在超链接中传递参数 本章目标.

Slides:



Advertisements
Similar presentations
Power point 制作 耿祥义 张跃平 配合 例子源代码一起使用. 第 4 章 内 置 对 象 有些成员变量不用声明就可以在 JSP 页 面的脚本( Java 程序片和 Java 表达式) 中使用,这就是所谓的内置对象。 内置对象有: resquest 、 response 、 session.
Advertisements

网络应用程序设计 2014 JavaBean. JavaBean 及其属性 JavaBean 就是一种 Java 的组件技术 JavaBean 是 Java 类 JavaBean 通过约定的方法名实现属性功能 简单属性 void setXxx(Type value) Type getXxx() boolean.
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
第 4 课 使用 JSP 处理客户端请求.  掌握 Form 表单的请求处理  掌握 JSP 常用内置对象的用法 out 对象 request 对象 response 对象 本章目标.
面向侧面的程序设计 方林博士 本文下载地址:
Chapter 3: SQL.
基于JSP搭建Web应用程序.
联系电话: 联 系 人:李爱玲 中国人文社会科学文献(CASHL)传递 联系电话: 联 系 人:李爱玲
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
基于JSP搭建Web应用程序.
第七章 JSP页面的访问控制.
2017/3/6 V1 实习指导管理系统.
2017/3/6 V1 实习指导管理系统.
网络测评操作图解 武进区委组织部干部一科 2010年12月.
MVC Servlet与MVC设计模式.
基于工作过程的网页设计与网站开发教程 英语等级考试专题学习网站发布测试 主编:张洪斌 刘万辉 机械工业出版社.
新闻发布系统.
青岛市大学生职业生涯规划大赛 培训手册-学生 万达信息股份有限公司.
济贵金属艺术品交易中心 JIGUIJINSHUYISHUPINJIAOYIZHONGXIN 入金操作流程
出入金操作流程.
第九章 字符串.
J2EE与中间件技术 ——Lab.
注 册 在浏览器中输入如下网址:
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
K/3 Cloud云之家集成 K/3 Cloud 基础系统部.
Ebooking 突发问题解决方案.
SQL Injection.
走进编程 程序的顺序结构(二).
辅导课程六.
PostgreSQL 8.3 安装要点 四川大学计算机学院 段 磊
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第一讲: 基本流程(1).
Hub Web System 主要功能: 1.查询库存(Query Current Storage) 2.创建PL(Create PL) 3.查询、打印PL单(Query & Print PL) 4.查询允交量、在途量 5.修改用户的基本信息(Update Password) 6.查询GR(Query.
以ISI平台为例,为您演示一下如何在Endnote文献中查看该文献的References
第17章 网站发布.
2019/1/12 GDP设计协同 超级管理员操作手册 GDP项目组.
VPN访问图书馆资源 方法说明 武汉纺织大学图书馆信息部制.
供应商登录CJLR SRM系统入口 CJLR供应商仅可以在互联网上访问SRM系统,无法在CJLR内网登录SRM系统.
Windows 7 的系统设置.
Science and technology report service systemUsage method
任务1-3 使用Dreamweaver创建ASP网页
第二章 登录UNIX操作系统.
Web安全基础教程
续签协议&修改密码操作手册 GDP项目组 2019/01/30.
Drupal Dev 我想知道:什么时候、什么变化.
VB与Access数据库的连接.
iSIGHT 基本培训 使用 Excel的栅栏问题
JoVE实验视频期刊用户指南.
组织机构栏目内容管理 青海省教育信息中心 2018年12月18日.
文档创建与发布操作要点 青海省教育信息中心 2018年12月18日.
3.16 枚举算法及其程序实现 ——数组的作用.
点击此处添加幻灯主标题 点击此处添加幻灯副标题 2019/5/8 此处添加公司信息.
教育部特殊教育通報網 學生異動、接收操作說明.
Delphi 7.0开发示例.
SpringerLink数据库使用说明 上海师范大学图书馆
進貨管理介接更動 有關「匯入進貨資料」傳,請注意「上游業者出貨單號」,上游業者出貨單號要配合「匯出上游出貨資料」中的「出貨單號」或是「自有系統上傳的出貨單號」。 Ø  若「自有系統上傳的出貨單號」有值,則「匯入進貨資料」中的「上游業者出貨單號」就要key入「匯出上游出貨資料」中的「自有系統上傳的出貨單號」。
Python 环境搭建 基于Anaconda和VSCode.
四川省中小学教师信息技术应用能力提升工程
GDP设计协同在线配置产品线公网访问权限操作手册
关于使用问题的解决方法 中山医学院大数据信息系统.
VB与Access数据库的连接.
如何在EBSCO host上创建检索结果邮件订阅
第四章 UNIX文件系统.
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第六讲 酒店客房管理系统(二) 教育部“十二五”职业教育国家规划教材
考察点:switch\while\for System.in\Scanner char vs int
多个Activity的使用 本讲大纲: 1、使用Bundle在Activity之间交换数据 2、调用另一个Activity并返回结果
JUDDI安装手册.
Presentation transcript:

第 5 课 JSP 页面的访问控制

 掌握访问控制实现的流程  掌握 JSP 内置对象的用法 session 对象 application 对象  掌握 include 指令  掌握如何在超链接中传递参数 本章目标

本章任务  完成最终版的新闻发布系统 为新闻发布系统增加访问控制 为新闻发布系统增加已访问人数统计 实现新闻发布系统的分级浏览

生活中的访问控制  下载电子书时,系统会提示用户登录网站 点击下载, 系统转入登录页面 每次下载之前,系统如何判断用户是否已经登录?

如何实现访问控制 ? 系统如何保存不同用户的登录信息? 使用 JSP 会话跟踪机制,可以维持每个用户的会话信息,也就是为 不同的用户保存不同的数据 1 2 访问控制流程图: 用户登录 进入用户注 册页面 系统保存该用 户的登录信息 进入欲访问 的页面 是否是注册用户 否 是 用户直接访 问某个页面 进入用户登录 页面 显示该页面 内容 系统是否保存了 该用户登录信息 否 是

浏览器关闭, 本次会话结束 什么是会话 ? 一个会话就是浏览器与服务器之间的一次通话,它包 含浏览器与服务器之间的多次请求、响应过程。 浏览器 session 对象 请求 1 浏览器 请求 2…n session 是 JSP 内置对象, 与浏览器一一 对应,允许用 户存储和提取 会话状态的信 息 响应 1 响应 2…n session 对象

JSP 内置对象 session  session 对象用来存储有关用户会话的所有信息  session 对象常用方法: void setAttribute(String key, Object value) :以键 / 值的 方式,将一个对象的值存放到 session 中 Object getAttribute(String key) :根据名称去获取 session 中存放对象的值 session.setAttribute("name", "admin"); String name = (String) session.getAttribute("name"); 访问控制就是基于 session 来完成的

为新闻发布系统增加访问控制 4-1  升级新闻发布系统,增加访问控制功能,具体要求如下: 提供用户登录页面 用户必须登录之后,才能访问新闻发布系统 登录处理页面 (login.jsp) 1 、获得登录信息 2 、查询数据库,判断该用户是否注册 3 、如果该用户已注册,在 session 中 保存该用户的登录信息,并且跳转到新 闻发布系统的首页面 登录处理页面 (login.jsp) 1 、获得登录信息 2 、查询数据库,判断该用户是否注册 3 、如果该用户已注册,在 session 中 保存该用户的登录信息,并且跳转到新 闻发布系统的首页面 新闻发布系统首页面 (index.jsp) 1 、从 session 中提取该用户信息 2 、如果用户信息存在,显示首页内容 3 、如果用户信息不存在,跳转到登录页面 新闻发布系统首页面 (index.jsp) 1 、从 session 中提取该用户信息 2 、如果用户信息存在,显示首页内容 3 、如果用户信息不存在,跳转到登录页面 用户已注册 session 中无法 提取到用户信息 1 2 3

为新闻发布系统增加访问控制 4-2  在 news 数据库中创建表 userinfo ,负责存储用户名、密码  创建类( User.java ),负责存储用户名、密码  创建登录页面( login.html )  创建登录处理页面( login.jsp ) 登录处理页面的代码片断 <% if (rs.next()) { // 如果是已注册用户 // 把用户名、密码封装在 User 对象中 User loginedUser = new User(name, pass); session.setAttribute("LOGINED_USER", loginedUser); response.sendRedirect("index.jsp"); } else { response.sendRedirect(“login.html"); } %> 在 session 中存 放用户登录信息

为新闻发布系统增加访问控制 4-3  在新闻发布系统后台首页面 (index1.jsp) 中加 入登录验证 <% User user = (User) session.getAttribute("LOGINED_USER"); if (user == null) { response.sendRedirect(“login.html"); } %> 如果 session 中不存在该 用户的登录信息,转入 登录页面

为新闻发布系统增加访问控制 4-4  访问控制效果验证,步骤如下: 直接在 IE 地址栏中输入 URL ,访问系统首页面 通过登录页面进入系统首页面 重新开启一个 IE 窗口,直接访问系统首页面 每个步骤会发生什么样的结果?为什么会产生这样 的结果? 每个 session 对象都与浏览器一一对应 重新开启一个浏览器,相当于重新创建一个 session 对象 每个 session 对象都与浏览器一一对应 重新开启一个浏览器,相当于重新创建一个 session 对象 演示:访问控制效果验证

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

include 指令 2-2  创建登录验证文件 checklogin.jsp  在后台首页面( index.jsp )中使用 include 指令引用登录 验证文件 <% User user = (User) session.getAttribute("LOGINED_USER"); if (user == null) { response.sendRedirect(“login.html"); } %>

小结 1  创建登录页面 login.html 提供用户名输入框、以及登录按钮  创建登录处理页面 login.jsp 如果用户名为 sa ,把用户名存储在 session 中,并跳转进 入 index.jsp 中 否则跳转进入 login.html 页面  创建页面 index.jsp 如果 session 中没有该用户信息,跳转进入 login.html 中 否则显示欢迎信息

为新闻发布系统增加已访问人数统计  升级新闻发布系统,增加已访问人数统计功能, 具体要求如下: 左导航页面中增加超链接:已访问人数统计 已访问人数统计页面:显示已访问人数,以及访问 者的登录名称 登录处理页面 (login2.jsp) 1 、在 session 中保存该用户信息 2 、在全局范围内保存该用户信息 3 、跳转到新闻发布系统的首页面 登录处理页面 (login2.jsp) 1 、在 session 中保存该用户信息 2 、在全局范围内保存该用户信息 3 、跳转到新闻发布系统的首页面

为新闻发布系统增加已访问人数统计  创建登录页面( login2.html )  创建登录处理页面( login2.jsp ) 登录处理页面代码片断 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"); } 在全局范围内存入 访问者列表 从全局范围内取出原 有的访问者列表

为新闻发布系统增加已访问人数统计  在新闻发布系统左导航栏中加入超链接( left.jsp )  创建已访问人数统计页面( showAllLoginedUsers.jsp ) 已访问人数统计页面代码片断 <% List loginedUsers = new ArrayList(); // 访问者列表 if (application.getAttribute("LOGINED_USER") != null) loginedUsers = (List) application.getAttribute("LOGINED_USER"); %> 目前, 有 人已经访问过本网站 ! 访问者的登录名称分别是: <% for (int i = 0; i < loginedUsers.size(); i++) { User logineduser = (User) loginedUsers.get(i); out.print(logineduser.getName()); out.print(" "); } %> 从全局范围内取出访 问者列表 逐行显示每个访问者 的登录名称

 已访问人数统计效果验证,步骤如下: 通过登录页面进入系统首页面,查看已访问人数统计 重新开启一个 IE 窗口,使用不同的用户登录进入首页 面,查看已访问人数统计 每个步骤会发生什么样的结果?为什么会产生这样 的结果? 演示:已访问人数统计的效果验证 为新闻发布系统增加已访问人数统计

JSP 内置对象 application  application 类似于系统的 “ 全局变量 ” ,用于实现 用户之间的数据共享  application 对象的常用方法: void setAttribute(String key, Object value) :以键 / 值 的方式,将一个对象的值存放到 application 中 Object getAttribute(String key) :根据键去获取 application 中存放对象的值 application.setAttribute("LOGINED_USER", new ArrayList()); if (application.getAttribute("LOGINED_USER") != null) { List loginedUsers = (List) application.getAttribute("LOGINED_USER"); }

新闻发布系统的分级浏览 4-1  实现新闻的分级浏览功能,具体要求如下: 在新闻发布系统的前台首页面上,显示所有新闻一级标题 为所有新闻一级标题设置超链接,点击后,显示下属的新闻二级标题 “ 体育 ” 对应的超链接 “ 体育 ” 下属的新闻二 级标题列表 点击 “ 体育 ”

新闻发布系统的分级浏览 4-2  创建前台首页面( newspre.jsp ) 使用表格把页面分为三块:上栏、左下栏、右下栏 上栏显示图片 左下栏显示新闻一级标题,提取到一个单独的文件 showFirstTitle.jsp 中 右下栏显示新闻二级标题,提取到一个单独的文件 showSecondTitle.jsp 中 使用 include 指令引入这两个文件 上栏 右下栏 左下栏

新闻发布系统的分级浏览 4-3  创建新闻一级标题的浏览页面( showFirstTitle.jsp ) 代码片断 <% // 从数据库中获取所有新闻一级标题,并逐行显示 FirstLeveTitleDbOpreation first = new FirstLeveTitleDbOpreation(); List list1 = first.getAllFirstLevelTitleList(); if (list1!=null && list1.size() != 0) { for (int i = 0; i < list1.size(); i++) { FirstLevelTitle fTitle = (FirstLevelTitle) list1.get(i); %> "> <% } } %> 超链接中传递参数: 新闻一级标题的 ID

新闻发布系统的分级浏览 4-4  在类 SecondLevelTitleDbOpreation 中添加方法 getSecondByFirst() ,根据新闻一级标题的 ID 获取对应的新 闻二级标题  创建新闻二级标题的浏览页面( showSecondTitle.jsp ) 根据新闻一级标题的 ID ,显示对应的新闻二级标题 代码片断 <% String strParentId = request.getParameter("parentId"); if (strParentId!=null){ int parentId = Integer.parseInt(strParentId); // 根据新闻一级标题 ID 获取下属的新闻二级标题列表 List list2 = new SecondLevelTitleDbOpreation().getSecondByFirst(parentId); } %> 处理 URL 中的请求参数: 得到新闻一级标题的 ID

小结 2  创建 JSP 页面 one.jsp 设置一个超链接,链接至 two.jsp 文件 向 two.jsp 传递一个参数,参数名为 str ,其值 为字符串 hello  创建 JSP 页面 two.jsp 在该页面中输出参数的值

总结  启动 IE 窗口运行如下 JSP ,如果连续刷新 5 次,输出结果是 什么?  重新启动一个新的 IE 窗口运行该 JSP ,如果连续刷新 3 次, 输出结果是什么 ? <% Integer ival = (Integer)session.getAttribute("counter"); if (ival == null) ival = new Integer(1); else{ ival = new Integer(ival.intValue() + 1); session.setAttribute("counter", ival); } %> 第一次输出: 5 5 第二次输出: 3 3