JSP4隐式对象之作用域通信对象_第1页
JSP4隐式对象之作用域通信对象_第2页
JSP4隐式对象之作用域通信对象_第3页
JSP4隐式对象之作用域通信对象_第4页
JSP4隐式对象之作用域通信对象_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

作用域通信对象本讲案例增加访问控制。增加已访问人数统计。根据分类浏览电影列表。本讲目标掌握JSP作用域通信对象的用法pageContext对象request对象session对象application对象掌握使用超链接传递参数作用域通信对象对象的生命周期和可访问性,称为作用域(scope)。作用域:page、request、session和application作用域通信对象:pageContext、request、session、application4个通信对象的常用的方法:publicvoidsetAttribute(Stringname,Objectvalue)。publicObjectgetAttribute(Stringname)。上网时遇到的访问控制系统如何判断用户已经登录?点击立即下载,转到登录页面如何实现访问控制系统如何保存不同用户的登录信息?JSP会话跟踪机制,可以保存用户的会话信息,即不同用户保存不同的数据12用户登录进注册页面保存该用户的登录信息进入访问的页面是否注册用户否是访问某页面进入登录页面进入该页面是否保存了该用户登录信息否是问题流程图会话跟踪请求1响应1请求n…………..服务器将唯一的会话对象和会话ID

分配给客户端以跟踪用户响应nWeb应用服务器Session对象浏览器关闭,本次会话结束session是隐式对象,与浏览器一一对应,允许用户存取会话状态的信息session对象存储会话的所有信息常用方法:voidsetAttribute(Stringkey,Objectvalue):以键/值的方式,将对象的值存到session中ObjectgetAttribute(Stringkey):根据名称获取session中对象的值session.setAttribute("name","admin");Stringname=(String)session.getAttribute("name");访问控制可否用session完成?为电影销售系统增加访问控制登录才能访问后台登录按钮的处理1、获取输入信息2、查询数据库,判断是否注册3、如果已注册,session中保存登录信息,并转到后台首页后台首页(index.jsp)1、从session中提取该用户信息2、如果存在,显示首页3、如果不存在,跳转到登录页面已注册123无登录信息1、表users,存用户名、密码2、数据库访问类,包含doLogin方法验证登录3、登录页面(login.jsp)4、处理页面(doLogin.jsp)<%//登录验证UsersloginedUser=null;UsersDAOusersDAO=newUsersDAOImpl();loginedUser=usersDAO.doLogin(userName,passWord);if(loginedUser!=null){//已注册

//会话中存放登录信息

session.setAttribute("LOGINED_USER",loginedUser);

//转到后台首页

response.sendRedirect(path+"/admin/admin.jsp");}else{

//转到后台登录

response.sendRedirect(path+"/admin/login.jsp");}%>session中存放登录信息增加访问控制后台首页面(admin.jsp)加入访问控制<%Usersuser=(Users)session.getAttribute("LOGINED_USER");if(user==null){response.sendRedirect(request.getContextPath()+"/admin/login.jsp");}%>不存在登录信息,转登录页面增加访问控制测试,步骤如下:1、输入URL,访问后台页面2、通过登录页面进入页面3、重开一个窗口,访问后台页面每个步骤发生什么结果?为什么?增加访问控制问题使用include指令许多页面需加入访问控制代码。如何避免冗余代码?代码写入单独的JSP,通过include指令引用,降低代码冗余,便于修改共性内容提问使用include指令创建验证文件checkSession.jspadmin.jsp引用验证文件<%@pageimport=".systop.jspt06.entity.Users"pageEncoding="UTF-8"%><%//如果会话中不存在登录信息,转到登录页面Usersuser=(Users)session.getAttribute("LOGINED_USER");if(user==null){response.sendRedirect(request.getContextPath()+"/admin/login.jsp");}%><%@includefile="checkSession.jsp

"%>小结登录页面login.html处理登录页面doLogin.jsp如果用户名为admin,把用户名存储在session中,转入index.jsp否则转入login.html页面admin.jsp如果session中没有该用户信息,转入login.html否则显示欢迎信息试一试为电影销售系统增加已访问人数统计升级系统,增加已访问人数统计功能,要求如下:点击已访问人数统计:显示已访问人数,以及访问者的登录名称登录处理页面(doLogin.jsp)1、在session中保存该用户信息2、在全局范围内保存该用户信息1243增加访问人数统计修改doLogin.jsp,把已登录用户保存在application。if(loginedUser!=null){//已注册//存到会话中session.setAttribute("LOGINED_USER",loginedUser);ListloginedUsers=newArrayList();//定义对象,存已访问用户列表//取出已访问用户列表if(application.getAttribute("LOGINED_USER")!=null){loginedUsers=(List)application.getAttribute("LOGINED_USER");}//新登录用户信息存入已访问用户列表loginedUsers.add(loginedUser);//更新全局范围中的已访问用户列表application.setAttribute("LOGINED_USER",loginedUsers);//重定向到后台管理首页response.sendRedirect(path+"/admin/admin.jsp");}

更新全局范围内访问者列表从全局范围内取出原有的访问者列表增加已访问人数统计左导航页面left.jsp的创建右边已访问人数页面countLoginedUsers.jsp的创建。

countLoginedUsers.jsp片断<%ListloginedUsers=newArrayList();//访问者列表if(application.getAttribute("LOGINED_USER")!=null)loginedUsers=(List)application.getAttribute("LOGINED_USER");%>已经有<%=loginedUsers.size()%>人访问过本网站!<br><br>他们是:<br><%

for(inti=0;i<loginedUsers.size();i++){ UsersloginedUser=(User)loginedUsers.get(i); out.print(loginedUser.getUserName()); out.print("<br/>");}%>

从全局范围内取值逐行显示每个访问者测试已访问人数统计:1、通过登录进入系统,查看人数统计2、重开一个窗口,用不同的用户登入系统,查看人数统计每个步骤发生什么结果?为什么?增加已访问人数统计问题application对象application类似于“全局变量”,实现用户间的数据共享常用方法:voidsetAttribute(Stringkey,Objectvalue):键/值方式ObjectgetAttribute(Stringkey):根据键获取对象的值application.setAttribute("LOGINED_USER",newArrayList());if(application.getAttribute("LOGINED_USER")!=null){ListloginedUsers=(List)application.getAttribute("LOGINED_USER");}根据分类浏览电影列表要求:前台首页显示电影分类点击电影分类显示电影列表“动作”对应的超链接“动作”类的电影列表点击“动作”前台页面(index.jsp)使用DIV把页面分为n块左下栏显示电影分类,引用showMoviesType.jsp中下栏显示电影列表,引用moviesList.jsp中下栏左下栏根据分类浏览电影列表showMoviesType.jsp

<%//从数据库中获取电影分类,并逐行显示TypeDAOtypeDAO=newTypeDAOImpl();//创建电影分类数据库访问类对象Listlist=typeDAO.search();//查询电影分类列表//循环遍历电影分类列表在页面显示for(inti=0;i<list.size();i++){Typetype=(Type)list.get(i);%>

<imgsrc="images/arr.gif"> <ahref="index.jsp?typeID=<%=type.getTypeID()%>"class="menu">

<%=type.getTypeName()%>

</a><br><br><%

}%>超链接中传递参数:电影分类的ID根据分类浏览电影列表moviesList.jsp根据分类的ID,显示对应的电影列表<%

StringsTypeID=request.getParameter("typeID");if(sTypeID!=null){inttypeID=Integer.parseInt(sTypeID);

//根据分类ID获取电影列表,暂不分页

MoviesDAOmoviesDAO=newMoviesDAOImpl();ListmoviesList=moviesDAO.search(1,typeID);

if(moviesList!=null&&moviesList.size()!=0){

for(inti=0;i<moviesList.size();i++){Moviesmovie=(Movies)moviesList.get(i);%>处理URL的请求参数:得到分类ID根据分类浏览电影列表四个作用域通信对象的区别四个作用域计数结果如图所示。四个作用域通信对象的区别得出结论:1. pageContext里的变量没法从scope1.jsp传递到scope2.jsp。页面跳转,变量就不见了。2. request里的变量可以跨越forward

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论