第七章 JSP页面的访问控制.

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 对象 本章目标.
第 5 课 JSP 页面的访问控制.  掌握访问控制实现的流程  掌握 JSP 内置对象的用法 session 对象 application 对象  掌握 include 指令  掌握如何在超链接中传递参数 本章目标.
Chapter 3: SQL.
基于JSP搭建Web应用程序.
联系电话: 联 系 人:李爱玲 中国人文社会科学文献(CASHL)传递 联系电话: 联 系 人:李爱玲
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
基于JSP搭建Web应用程序.
2017/3/6 V1 实习指导管理系统.
2017/3/6 V1 实习指导管理系统.
网络测评操作图解 武进区委组织部干部一科 2010年12月.
北京学生海洋意识教育年 主题系列活动 竞赛报名系统
MVC Servlet与MVC设计模式.
新闻发布系统.
青岛市大学生职业生涯规划大赛 培训手册-学生 万达信息股份有限公司.
Tutorial on Overseas Module User Registration 海外学员注册指南
第九章 字符串.
移动开发的灵便迭代之道 黄凯.
Hello World 體驗實作第一個JSP程式.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
专题4:JSP脚本和指令.
Ebooking 突发问题解决方案.
SQL Injection.
走进编程 程序的顺序结构(二).
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
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项目组.
供应商登录CJLR SRM系统入口 CJLR供应商仅可以在互联网上访问SRM系统,无法在CJLR内网登录SRM系统.
Science and technology report service systemUsage method
任务1-3 使用Dreamweaver创建ASP网页
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二章 登录UNIX操作系统.
续签协议&修改密码操作手册 GDP项目组 2019/01/30.
Drupal Dev 我想知道:什么时候、什么变化.
VB与Access数据库的连接.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
第4章 Excel电子表格制作软件 4.4 函数(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
组织机构栏目内容管理 青海省教育信息中心 2018年12月18日.
文档创建与发布操作要点 青海省教育信息中心 2018年12月18日.
3.16 枚举算法及其程序实现 ——数组的作用.
点击此处添加幻灯主标题 点击此处添加幻灯副标题 2019/5/8 此处添加公司信息.
教育部特殊教育通報網 學生異動、接收操作說明.
Delphi 7.0开发示例.
SpringerLink数据库使用说明 上海师范大学图书馆
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
進貨管理介接更動 有關「匯入進貨資料」傳,請注意「上游業者出貨單號」,上游業者出貨單號要配合「匯出上游出貨資料」中的「出貨單號」或是「自有系統上傳的出貨單號」。 Ø  若「自有系統上傳的出貨單號」有值,則「匯入進貨資料」中的「上游業者出貨單號」就要key入「匯出上游出貨資料」中的「自有系統上傳的出貨單號」。
Python 环境搭建 基于Anaconda和VSCode.
GDP设计协同在线配置产品线公网访问权限操作手册
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
指導教授:吳有龍教授 學生:黃寶慧 學號: G 日期:2008年12月24日
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
关于使用问题的解决方法 中山医学院大数据信息系统.
VB与Access数据库的连接.
第四章 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并返回结果
Presentation transcript:

第七章 JSP页面的访问控制

回顾 使用JSP编程时,如何在服务器端获得用户在文本框中输入的数值? 什么是JSP内置对象?列举一些常用的JSP内置对象,并说明它们的作用

预习检查 请说明JSP内置对象session与application的区别 include指令的作用是什么?

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

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

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

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

什么是会话 一个会话就是浏览器与服务器之间的一次通话,它包含浏览器与服务器之间的多次请求、响应过程 session是JSP内置对象,与浏览器一一对应,允许用户存储和提取会话状态的信息 请求 1 浏览器 响应 1 session对象 请求 2…n 浏览器 响应 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 升级新闻发布系统,增加访问控制功能,具体要求如下: 2 1 3 提供用户登录页面 用户必须登录之后,才能访问新闻发布系统 登录处理页面(login.jsp) 1、获得登录信息 2、查询数据库,判断该用户是否注册 3、如果该用户已注册,在session中保存该用户的登录信息,并且跳转到新闻发布系统的首页面 2 1 session中无法 提取到用户信息 新闻发布系统首页面(index.jsp) 1、从session中提取该用户信息 2、如果用户信息存在,显示首页内容 3、如果用户信息不存在,跳转到登录页面 用户已注册 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对象

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

include指令 2-2 创建登录验证文件 checklogin.jsp 在后台首页面(index.jsp)中使用include指令引用登录验证文件 <%@ page import="s2jsp.sg.ch07.User"%> <% User user = (User) session.getAttribute("LOGINED_USER"); if (user == null) { response.sendRedirect(“login.html"); } %> 完整代码实现 <%@ include file="checklogin.jsp"%>

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

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

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

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

JSP内置对象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 实现新闻的分级浏览功能,具体要求如下: 在新闻发布系统的前台首页面上,显示所有新闻一级标题 为所有新闻一级标题设置超链接,点击后,显示下属的新闻二级标题 “体育”对应的超链接 第九章jsp动态生成超链接 改处理URL请求参数 点击“体育” “体育”下属的新闻二级标题列表

新闻发布系统的分级浏览 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); %> <div align="center"><a href ="newspre.jsp?parentId=<%=fTitle.getId()%>"> <%=fTitle.getTitleName()%></a></div><br> <% } } 超链接中传递参数:新闻一级标题的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 创建JSP页面two.jsp one.jsp完整代码实现 two.jsp完整代码实现 向two.jsp传递一个参数,参数名为str,其值为字符串hello 创建JSP页面two.jsp 在该页面中输出参数的值 one.jsp完整代码实现 two.jsp完整代码实现

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

Thank you