




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于基于JSPJSP的的WebWeb应用开发应用开发作用域通信对象本讲案例本讲案例 增加访问控制。增加访问控制。 增加已访问人数统计。增加已访问人数统计。 根据分类浏览电影列表。根据分类浏览电影列表。本讲目标本讲目标 掌握掌握JSP作用域通信对象的用法作用域通信对象的用法pageContext对象对象request对象对象session对象对象application对象对象 掌握使用超链接传递参数掌握使用超链接传递参数作用域通信对象作用域通信对象 对象的生命周期和可访问性,称为作用域(对象的生命周期和可访问性,称为作用域(scope)。)。 作用域:作用域:page、request、sessi
2、on 和和 application 作用域通信对象:作用域通信对象:pageContext、 request、 session、application 4个通信对象的常用的方法:个通信对象的常用的方法: public void setAttribute(String name, Object value) 。 public Object getAttribute(String name ) 。上网时遇到的访问控制上网时遇到的访问控制 系统如何判断用户已经登录?系统如何判断用户已经登录?点击立即下载,点击立即下载, 转到登录页面转到登录页面 如何实现访问控制如何实现访问控制系统如何保存不同用户的
3、登录信息?系统如何保存不同用户的登录信息?JSP会话跟踪机制,可以保存用户的会话信息,即不同用户保存不会话跟踪机制,可以保存用户的会话信息,即不同用户保存不同的数据同的数据 12用户登录用户登录进注册页面进注册页面保存该用户的保存该用户的登录信息登录信息进入访问的进入访问的页面页面是否注册用户是否注册用户否否是是访问某页面访问某页面进入登录页面进入登录页面进入该页面进入该页面是否保存了该用是否保存了该用户登录信息户登录信息否否是是 流程图流程图 会话跟踪会话跟踪请求 1响应 1请求 n.服务器将唯一的会话对象和会话 ID 分配给客户端以跟踪用户响应 nWeb应用应用服务器服务器Session对
4、象对象浏览器关闭,浏览器关闭,本次会话结束本次会话结束session是隐式对象,是隐式对象,与浏览器一一对应,允与浏览器一一对应,允许用户存取会话状态的许用户存取会话状态的信息信息session对象对象 存储会话的所有信息存储会话的所有信息 常用方法:常用方法: void setAttribute(String key, Object value):以键:以键/值的方式,值的方式,将对象的值存到将对象的值存到session中中 Object getAttribute(String key):根据名称获取:根据名称获取session中对象中对象的值的值session.setAttribute(n
5、ame, admin);String name = (String) session.getAttribute(name);访问控制可否用访问控制可否用session完成?完成? 为电影销售系统增加访问控制为电影销售系统增加访问控制登录才能访问后台登录才能访问后台登录按钮的处理登录按钮的处理1、获取输入信息、获取输入信息2、查询数据库,判断是否注册、查询数据库,判断是否注册3、如果已注册,、如果已注册,session中保存登录中保存登录信息,并转到后台首页信息,并转到后台首页后台首页后台首页(index.jsp)1、从、从session中提取该用户信息中提取该用户信息2、如果存在,显示首页、如
6、果存在,显示首页3、如果不存在,跳转到登录页面、如果不存在,跳转到登录页面 已已注注册册123无登录信息无登录信息 1、表、表users,存用户名、密码,存用户名、密码 2、数据库访问类,包含、数据库访问类,包含doLogin方法验证登录方法验证登录 3、登录页面(、登录页面(login.jsp) 4、处理页面(、处理页面(doLogin.jsp)session中存放中存放登录信息登录信息增加访问控制增加访问控制 后台首页面后台首页面(admin.jsp) 加入访问控制加入访问控制不存在登录信息,转登录页面不存在登录信息,转登录页面增加访问控制增加访问控制 测试,步骤如下:测试,步骤如下: 1
7、、输入、输入URL,访问后台页面,访问后台页面 2、通过登录页面进入页面、通过登录页面进入页面 3、重开一个窗口,访问后台页面、重开一个窗口,访问后台页面每个步骤发生什么结果?为什么?每个步骤发生什么结果?为什么?增加访问控制增加访问控制使用使用include指令指令许多页面需加入访问控制代码。如何避免冗余代码?许多页面需加入访问控制代码。如何避免冗余代码?代码写入单独的代码写入单独的JSP,通过,通过include指令引用,指令引用,降低代码冗余,便于修改共性内容降低代码冗余,便于修改共性内容 使用使用include指令指令 创建验证文件创建验证文件 checkSession.jsp adm
8、in.jsp引用验证文件引用验证文件小结小结 登录页面登录页面login.html 处理登录页面处理登录页面doLogin.jsp 如果用户名为如果用户名为admin,把用户名存储在,把用户名存储在session中,转入中,转入index.jsp 否则转入否则转入login.html 页面页面admin.jsp 如果如果session中没有该用户信息,转入中没有该用户信息,转入login.html 否则显示欢迎信息否则显示欢迎信息为电影销售系统增加已访问人数统计为电影销售系统增加已访问人数统计 升级系统,增加已访问人数统计功能,要求如下:升级系统,增加已访问人数统计功能,要求如下: 点击已访问
9、人数统计:显示已访问人数,以及访问者的登录名称点击已访问人数统计:显示已访问人数,以及访问者的登录名称登录处理页面登录处理页面(doLogin.jsp)1、在、在session中保存该用户信息中保存该用户信息2、在全局范围内保存该用户信息、在全局范围内保存该用户信息1243增加访问人数统计增加访问人数统计 修改修改doLogin.jsp,把已登录用户保存在,把已登录用户保存在application。 if(loginedUser != null) /已注册已注册 /存到会话中存到会话中 session.setAttribute(LOGINED_USER,loginedUser); List l
10、oginedUsers = new ArrayList(); /定义对象,存已访问用户列表定义对象,存已访问用户列表 /取出已访问用户列表取出已访问用户列表 if (application.getAttribute(LOGINED_USER) != null) loginedUsers = (List) application.getAttribute(LOGINED_USER); /新登录用户信息存入已访问用户列表新登录用户信息存入已访问用户列表 loginedUsers.add(loginedUser); /更新全局范围中的已访问用户列表更新全局范围中的已访问用户列表 applicatio
11、n.setAttribute(LOGINED_USER, loginedUsers); /重定向到后台管理首页重定向到后台管理首页 response.sendRedirect(path + /admin/admin.jsp); 更新全局范围内访更新全局范围内访问者列表问者列表从全局范围内取出原从全局范围内取出原有的访问者列表有的访问者列表增加已访问人数统计增加已访问人数统计 左导航页面左导航页面left.jsp的创建的创建 右边已访问人数页面右边已访问人数页面countLoginedUsers.jsp的创建。的创建。 - countLoginedUsers.jsp片断片断-已经有已经有人访问过
12、本网站人访问过本网站!他们是:他们是:% for (int i = 0; i loginedUsers.size(); i+) Users loginedUser= (User) loginedUsers.get(i);out.print(loginedUser.getUserName();out.print(); % 从全局范围内取值从全局范围内取值逐行显示每个访问者逐行显示每个访问者 测试已访问人数统计:测试已访问人数统计: 1、通过登录进入系统,查看人数统计、通过登录进入系统,查看人数统计 2、重开一个窗口,用不同的用户登入系统,查看人数统计、重开一个窗口,用不同的用户登入系统,查看人数
13、统计每个步骤发生什么结果?为什么?每个步骤发生什么结果?为什么?增加已访问人数统计增加已访问人数统计application对象对象 application类似于类似于“全局变量全局变量”,实现用户间的数据共,实现用户间的数据共享享 常用方法:常用方法: void setAttribute(String key, Object value):键:键/值方式值方式 Object getAttribute(String key):根据键获取对象的值:根据键获取对象的值application.setAttribute(LOGINED_USER, new ArrayList();if (applicat
14、ion.getAttribute(LOGINED_USER) != null) List loginedUsers = (List) application.getAttribute(LOGINED_USER);根据分类浏览电影列表根据分类浏览电影列表 要求:要求: 前台首页显示电影分类前台首页显示电影分类 点击电影分类显示电影列表点击电影分类显示电影列表“动作动作”对应的超链对应的超链接接“动作动作”类的电影列类的电影列表表点击点击“动作动作” 前台页面(前台页面(index.jsp)使用使用DIV把页面分为把页面分为n块块左下栏显示电影分类,引用左下栏显示电影分类,引用showMovies
15、Type.jsp中下栏显示电影列表,引用中下栏显示电影列表,引用moviesList.jsp中下栏中下栏左下栏左下栏根据分类浏览电影列表根据分类浏览电影列表 showMoviesType.jsp %/从数据库中获取电影分类,并逐行显示从数据库中获取电影分类,并逐行显示TypeDAO typeDAO = new TypeDAOImpl(); /创建电影分类数据库访问类对象创建电影分类数据库访问类对象List list = typeDAO.search(); /查询电影分类列表查询电影分类列表/循环遍历电影分类列表在页面显示循环遍历电影分类列表在页面显示for(int i=0; i &nb
16、sp; a href=index.jsp?typeID= class=menu 超链接中传递参数:超链接中传递参数:电影分类的电影分类的ID根据分类浏览电影列表根据分类浏览电影列表 moviesList.jsp 根据分类的根据分类的ID,显示对应的电影列表,显示对应的电影列表% String sTypeID = request.getParameter(typeID);if (sTypeID != null) int typeID = Integer.parseInt(sTypeID); /根据分类根据分类ID获取电影列表获取电影列表,暂不分页暂不分页 MoviesDAO moviesDAO
17、= new MoviesDAOImpl(); List moviesList = moviesDAO.search(1, typeID); if(moviesList != null & moviesList.size() != 0) for(int i=0; i处理处理URL的请求参数:的请求参数:得到分类得到分类ID根据分类浏览电影列表根据分类浏览电影列表四个作用域通信对象的区别四个作用域通信对象的区别 四个作用域计数结果如图所示。四个作用域计数结果如图所示。四个作用域通信对象的区别四个作用域通信对象的区别 得出结论:得出结论: 1.pageContext里的变量没法从里的变量没法
18、从scope1.jsp传递到传递到scope2.jsp。页面跳转,变量就不见了。页面跳转,变量就不见了。 2.request里的变量可以跨越里的变量可以跨越forward前后的两页(如果前后的两页(如果redirect则不能,会生成一个新的则不能,会生成一个新的request)。但是只要刷)。但是只要刷新页面,变量重新计算。新页面,变量重新计算。 3.session和和application里的变量一直在累加,再次重里的变量一直在累加,再次重启浏览器,启浏览器,session里的变量重新计算。里的变量重新计算。 4.application里的变量一直在累加,除非重启里的变量一直在累加,除非重启tomcat。小结小结创建创建JSP页面页面one.jsp设置一个超链接,链接至设置一个超链接,链接至two.jsp文件文件向向two.jsp传递一个参数,参数名为传递一个参数,参数名为param,其值为字符串,其值为字符串hello创建创建JSP页面页面two.jsp在该页面中输出参数的值在该页面中输出参数的值总结总结 启动启动IE窗口运行如下窗口运行如下J
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论