版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JSP页面的访问控制1.1访问控制1.1.1如何实现访问控制如图1.1和图1.2所示是系统进行访问控制的两种情形。在图1.1中,用户通过登录页面登录网站,如果该用户是已注册用户,系统会保存该用户的登录信息,并让用户进入其欲访问的页面。在图1.2中,用户直接访问网站的某个页面,系统会去查询是否保存有该用户的登录信息,如果有,则显示该页面的内容,如果没有,就转入登录 页面,要求用户登录网站。图1.1访问控制流程(1)进入用户登录页面用户直接访统是否保存了、问某个页面用户登录信息/显示该页面内容图1.2访问控制流程(2)JSP为提供了一套会话跟踪机制,该机制可以维持每个用户的会话信息。也就是说, 使
2、用会话跟踪,可以为不同的用户保存不同的数据。1.1.2什么是会话就 Web开发来说,一个会话就是用户通过浏览器与服务器之间进行的一次通话,它 包含浏览器与服务器之间的多次请求、响应过程。如图1.3所示描述了浏览器与服务器的一次会话过程。当用户向服务器发岀第一次请 求时,服务器会为该用户创建唯一的会话,会话将一直延续到用户访问结束(浏览器 关闭,本次会话结束)。浏览器请求1响应1浏览器请求2n响应2n图1.3一次会话过程JSP提供了一个可以在多个请求之间持续有效的会话对象session , session对象允许用户存储和提取会话状态的信息。接下来,就来学习JSP内置对象 session。1.1
3、.3 JSP 内置对象 session在JSP中,提供了一个内置对象session, session对象用来存储有关用户会话的所有信息。session对象的常用方法如下:?void setAttribute(String key,Object value) :以键/值的方式,将一个对象的值存放到session中去。例如:session.setAttribute(name, admin);就是把字符串admin存放到 session中去,它对应的键是 name。Object getAttribute(String key):根据键去获取session中存放的对象的值。例如:String name
4、 = (String) session.getAttribute(name);就是通过名称为name的键获取 session中存放的对象的值。JSP内置对象在JSP中,访问控制就是基于session对象来完成的,接下来,就使用session为新闻发布系统增加访问控制。1.1.4为新闻发布系统增加访问控制现在升级新闻发布系统,增加访问控制功能,要求系统提供用户登录页面,所有用户 必须登录之后,才能访问新闻发布系统。访问控制流程如图1.4所示。用户畫 -丄文件叩 窑 査凹收rtc实口”J? 1 回用円1李,zi”用鮎歪码:厂査录I至&(1-一mIJ iHuttfiti., ilDOKsessi o
5、n 中无法登录处理页面(logi n.jsp)21.获得登录信息2.查询数据库,判断该用户是否注册3.如果该用户已注册,在session中保存该用户的登录信息,并且跳转到新闻发布系统的首页面用户已注册提取到用户信息.、新闻发布系统首页面(in dex.jsp)1. 从session中提取该用户信息2. 如果用户信息存在,显示首页内容3. 如果用户信息不存在,跳转到登录页面图1.4 新闻发布系统的访问控制流程根据新闻发布系统的访问控制流程,至少要完成如下几个步骤。(1 )在news数据库中创建表userinfo,负责存储用户名、密码。(2) 创建类(User.java),负责存储登录用户的信息,
6、如用户名、密码。(3) 创建登录页面(login.html )。(4) 创建登录处理页面( login.jsp )。(5) 在新闻发布系统首页面中加入登录验证。下面,就逐步完成这项升级任务。首先,在 news数据库中创建表userinfo,表结构见表 1.1。表1.1 数据表 userinfo字段名称字段说明数据类型大小loginName用户名称varchar50password密码varchar50接下来,创建类 User.java,用来存储已登录用户的用户名和密码,代码实现如示例1所示。package s2.java.web.sg1.entity;/用户名/密码public class U
7、ser private String name;private String password;/* 构造函数* param name 用户名* param password 密码*/public User(String name, String password) = name;this.password = password;* 返回用户名*/public String getName() return name;* 返回密码*/public String getPassword() return password;* 设定用户名* param name */publi
8、c void setName(String name) = name;/* 设定密码* param password */public void setPassword(String password) this.password = password;2 所示。登录页面 login.html 非常容易编写,代码实现如示例示例2 用户登录 vscript language =JavaScriptfunction loginSubmit()if(form1.l oginName.value =null | form1.loginName.value=)alert(请填写用户名
9、!);return false;if(form1.password.value =null | form1.password.value=)alert(请填写密码!);return false;return true;vform method=POST name=form1 action=login.jsp用户名:vinput type=text name=loginName size=20密 码:vinput type=password name=password size=20vinput type=submit valued 录name=submit onclick=ret
10、urn loginSubmit();vinput type=reset value= 重置name=resetv/pv/formv/bodyv/html要在登录处理页面中进行一系列的逻辑处理:首先查询数据库判断该用户是否已注册,接着在 session中保存已登录用户的信息,代码实现如示例3所示。示例3v%page language=java contentType=text/html;charset=GBK% v% page import=java.sql.*%v% page import=s2.java.web.sg1.ConnectionManager%v% page import=s2.
11、java.web.sg1.entity.User%在新闻发布系统首页面中加入登录验证。此时要完成的任务是:从 session 中提取用 户的信息,如果用户信息存在,显示首页内容;如果用户信息不存在,跳转到登录页面。已经完成了图 1.1 所示的访问控制流程。但是如果此时用户直接在浏览器地址栏中输 入新闻发布系统首页面的地址, 还是能够不受登录限制而访问成功的。 接下来要完成 的就是图 1.2 所示的访问控制流程。具体代码实现如示例 4 所示。示例4v% page language=java contentType=text/html; charset=GBK%v% page import=s2.
12、java.web.sg1.entity.User% 新闻发布系统 vFRAMESET rows=20%,80% cols=*vFRAME src=top.jsp name=topFrame scrolling=NO marginwidth=0 marginheight=0 vFRAMESET rows=* cols=25%,75%vFRAME src=left.jsp name=leftFrame scrolling=yes marginwidth=0marginheight=0vFRAME src=welcome.jsp name=mainFrame scrolling=yes margin
13、width=0 marginheight=0 v/FRAMESETv/FRAMESETvnoframesv/noframesv/html至此为止,新闻发布系统的访问控制已经基本实现了。还需要验证一下访问控制的效果,具体步骤可分为如下几步。(1) 直接在浏览器地址栏中输入URL,访问系统首页面。(2) 通过登录页面进入系统首页面。(3) 重新开启一个浏览器窗口,直接访问系统首页面。按照上述步骤运行一下,看看每个步骤会发生什么样的结果,并思考一下为什么会产生这样的结果。现在,来分析一下。如果直接在浏览器地址栏中输入URL,访问系统首页面,那么系统会跳入登录页面,提示用户进行登录。这个原因很简单,因
14、为在系统首页面中加入了登录验证。如果通过登录页面进入系统首页面,那么只要是已注册用户,都可以正常进入。这个可以通过登录处理页面的代码(示例3)得到解释。如果重新开启一个浏览器窗口,直接访问系统首页面,那么不管你在其他窗口中是否登录,你进入的肯定是登录页面。这是因为:每个session对象都与浏览器一一对应,也就是说,重新开启一个浏览器窗口,相当于重新创建一个session对象,在其他浏览器窗口保存的登录信息与新的浏览器窗口完全无关,所以系统会判定尚未登录,必定跳转进入登录页面1.1.5 in elude 指令在新闻发布系统中,除了首页面,还有许多二级页面,同样要求只有登录用户才能够访问。那么现
15、在就有一个问题需要解决,看下面的问题:如果要为多个页面添加登录验证,有没有办法避免重复代码的岀现?JSP为提供了文件引用指令in elude。可以将一些共性的内容写入一个单独的文件中,然后通过in elude指令引用该文件,从而缓解代码的冗余问题,并且修改起来也更加 方便,即对这些共性内容只需要修改那个独立的文件即可。首先,需要创建登录验证文件checklogin.jsp ,代码实现如示例5所示。示例5v% page import=s2.java.web.sg1.entity.User%示例5的代码与示例4中进行登录验证的那部分代码一模一样。有了这个独立的文件,只需在系统首页面和其他二级页面中
16、引用该文件就可以了,代码实现如示例6所示。示例6 新闻发布系统 vFRAMESET rows=20%,80% cols=*vFRAME src=top.jsp name=topFrame scrolling=NO marginwidth=0 marginheight=0v/noframes1.2已访问人数统计1.2.1为新闻发布系统增加已访问人数统计功能升级新闻发布系统,增加已访问人数统计功能,具体要求如下。左导航页面中增加一个超链接已访问人数统计 ”,单击该超链接后,进入已访问人数统计页面,该页面显示已访问人数,以及访问者的登录名称,如图1.5所示。图1.5已访问人数统计页面为了实现这一功能
17、,需要完成以下工作。(1) 创建登录页面(logi n2.html )。(2) 创建登录处理页面( log in 2.jsp ),把已登录用户的信息保存在一个全局范围内(3) 在左导航页面( left.jsp )中加入超链接,链接至已访问人数统计页面。(4)创建已访问人数统计页面( showAIILoginedUsers.jsp ),把已登录用户的信息从全 局范围内取出来。下面,就逐步完成这项升级任务。首先,创建登录页面login2.html ,这个登录页面与示例2中的login.html非常相似,只需把form表单的提交地点改为log in 2.jsp就可以了。接着,进入一个关键的环节,创建
18、登录处理页面log in 2.jsp。代码实现如示例7所示。示例7v% page import=java.sql.*%示例7同样实现了访问控制功能,除此之外,示例7的粗体部分则是为了实现已访问人数统计的功能,这段代码的主要用途是把已登录用户的信息存入一个集合中,该集合在全局范围内有效。其中使用到了一个JSP内置对象application,它类似于系统的全局变量,用于实现用户之间的数据共享。稍后将详细介绍这个内置对象,此处了解 其基本用途就可以了。接下来的工作较为简单,就是在左导航页面(left.jsp )中加入超链接,链接至已访问人数统计页面,代码实现如示例8所示。示例8v% page lan
19、guage=java contentType=text/html; charset=GBK%vlink href=./CSS/style-1.css rel=stylesheet type=text/cssvBODY BGCOLOR=#E8EDEEvbr新闻发布后台管理 一级标题发布 二级标题及文件位置发布 已访问人数统计 最后,要创建已访问人数统计页面(showAIILoginedUsers.jsp),把已登录用户的信息从全局范围内取岀来,并逐行显示,页面效果如图1.5所示。代码实现如示例9所示。示例9v% page language=java pageEncoding=GBK%v% pag
20、e import=s2.java.web.sg1.entity.User%vbr目前,有人已经访问过本网站!vbr访问者的登录名称分别是:%for (int i = 0; i loginedUsers.size(); i+) User logineduser = (User) loginedUsers.get(i);out.print(logineduser.getName();out.print();%v/pv/html至此为止,新闻发布系统的已访问人数统计功能已经完整实现了。还需要验证一下已访问人数统计的效果,具体步骤可分为如下几步。(1 )通过登录页面进入系统首页面,查看已访问人数统计。
21、(2)重新开启一个浏览器窗口,使用不同的用户登录进入首页面,查看已访问人数统计。按照上述步骤运行一下,看看每个步骤会发生什么样的结果,并思考一下为什么会产生这样的结果。现在,来分析一下。如果用户通过登录页面进入系统,那么登录处理页面会将该用户信息存放入访问者列表中,此时已访问人数一定会在原有基础上自动加1,并在页面上显示岀该用户的信息。如果重新开启一个浏览器窗口,使用不同的用户登录进入首页面,那么已访问人数依然会在原有基础上自动加1,并在页面上显示岀这个用户的信息。这是因为:所有的已访问用户的信息都存放在全局范围内,与浏览器窗口无关,这一点一定要同session区分开来。1.2.2 JSP 内
22、置对象 application前面已经提到过,application是一个JSP的内置对象,它类似于系统的全局变量,用于实现用户之间的数据共享。applicati on对象的常用方法如下所示。? void setAttribute(String key,Object value) :以键/值的方式,将一个对象的值存放到application 中。例如,application.setAttribute(LOGINED_USER, newArrayList();就是把一个 ArrayList 对象存放到 application 中去, 它对应的键是 LOGINED_USER 。? Object g
23、etAttribute(String key) :根据键去获取application 中存放对象的值。例如,如下代码段就是通过名称为LOGINED_USER的键获取 applicatio n中存放的对象的值。if (application.getAttribute(LOGINED_USER) != null) List loginedUsers = (List) application.getAttribute(LOGINED_USER);至此,JSP的几个常用的内置对象都已经介绍给了。下面通过表1.2对这些内置对象进行一下简要的总结。表1.2 JSP的常用内置对象内置对象名称说明out对象用
24、于向客户端输出数据request 对象主要用于客户端的请求处理response 对象用于响应客户请求并向客户端输出信息session 对象用来存储有关用户会话的所有信息application 对象类似于系统的全局变量,用于实现用户之间的数据共享.1.3分级浏览新闻发布系统的分级浏览属于新闻发布系统的前端页面,闻。接下来,就一起实现新闻的分级浏览功能。提供给一般用户浏览各级新1.3.1创建前台首页面新闻分级浏览功能的页面效果如图1.6所示,具体要求如下图1.6新闻发布系统的分级浏览?在新闻发布系统的前台首页面上,显示所有新闻一级标题。?为所有新闻一级标题设置超链接,单击后,显示下属的所有新闻二级
25、标题。具体做法可以分解为如下几个步骤。(1 )使用表格把前台首页面分为三块:上栏、左下栏、右下栏。(2 )上栏显示图片。(3) 左下栏显示新闻一级标题,提取到一个单独的文件showFirstTitle.jsp 中。(4) 右下栏显示新闻二级标题,提取到一个单独的文件showSecondTitle.jsp中(5)使用in elude指令引入这两个文件。前台首页面( newspre.jsp )的代码实现如示例10所示。示例10新闻发布系统 1.3.2完成新闻发布系统的一级新闻浏览功能下面要完成的就是新闻一级标题的浏览功能。除了逐条逐行显示新闻一级标题以外,ID,以还要为新闻一级标题设置超链接,并在
26、超链接中传递参数:新闻一级标题的便单击后能够根据新闻一级标题ID显示下属的所有新闻二级标题。创建新闻一级标题的浏览页面(showFirstTitle.jsp),代码实现如示例11所示。示例11v%page language=java contentType=text/html;charset=GBK% 新闻分类 %/从数据库中获取所有新闻一级标题,并逐行显示FirstLeveTitleDbOpreation first = new FirstLeveTitleDbOpreation();List list1 = first.getAIIFirstLevelTitleList();if (lis
27、t1!=null & list1.size() != 0) for (int i = 0; i 133完成新闻发布系统的二级新闻浏览功能中添在完成新闻二级标题的浏览功能之前,首先要在类Seco ndLevelTitleDbOpreationID获取下属的新闻二级标题,加方法getSeco ndByFirst(),用来根据新闻一级标题的代码实现如示例12所示。示例12package s2.java.web.sg15;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;impo
28、rt java.sql.SQLException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;public class SecondLevelTitleDbOpreation /*根据新闻一级标题获取下属所有的新闻二级标题 * param int新闻一级标题的ID * return ArrayList新闻二级标题的集合 */public List getSecondByFirst(int parentTitleId) List list = new ArrayList();Connection dbConnection = null;PreparedStatement pStatement = null;ResultSet res = null;try dbConnection = ConnectionMana
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公设备购销合同专业版
- 小产权房买卖合同参考范本
- 农村房屋继承协议书样式
- 工程委托设计合同示范
- 代征税款委托协议样本
- 合肥市建筑材料购销合同
- 员工劳动合同范本规范文本
- 员工购房抵押贷款合同范本
- 彩色钢板工程承包合同模板
- 2024年农村土地买卖协议书范本
- 北京市丰台区2024-2025学年高二上学期11月期中考试生物试题
- 安徽省合肥市2024-2025学年九年级上学期期中物理模拟试卷二(含答案)
- 浙江省嘉兴市桐乡六中教育集团实验中学2024-2025学年七年级上学期期中科学试题(无答案)
- 【四年级】上册道德与法治-4上3单元第9课《正确认识广告》
- 中国物联网安全行业市场现状、前景分析研究报告(智研咨询发布)
- 四川省成都市新津中学2024-2025学年八年级上学期10月月考英语试卷
- 2024-2025学年高一上学期期中模拟考试数学试题01(人教A版2019必修第一册第一-三章)(全解全析)
- 广东省东莞市多校2024-2025学年三年级上学期第二次月考数学试卷
- 第11课 多彩风车园(教案)三年级上册信息技术粤教版B版
- 国家知识产权局专利局专利审查协作2024年中心度公开招考专利审查员高频500题难、易错点模拟试题附带答案详解
- 2024秋初中化学九年级上册教学设计(教案)跨学科实践活动5
评论
0/150
提交评论