1 / 41

动态网页设计(JSP)

动态网页设计(JSP). 第 3 章 JSP 的内置对象. 第 3 章 JSP 的内置对象. 课程描述: 内置对象( Implicit Object )是在 JSP 页面中内置的一些缺省的对象,这些对象不需要预先声明就可以在脚本代码和表达式中随意使用。在不需要显示地声明情况下,在每一个 JSP 页面中都可以使用9个内置对象: request 、 reponse 、 out 、 session 、 pagecontext 、 application 、 config 、 page 、 exception 。. 知识点及技能点. ▲ 对象与内置对象

Télécharger la présentation

动态网页设计(JSP)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 动态网页设计(JSP) 第3章 JSP的内置对象

  2. 第3章 JSP的内置对象 课程描述: 内置对象(Implicit Object)是在JSP页面中内置的一些缺省的对象,这些对象不需要预先声明就可以在脚本代码和表达式中随意使用。在不需要显示地声明情况下,在每一个JSP页面中都可以使用9个内置对象:request、reponse、out、session、pagecontext、application、config、page、exception。

  3. 知识点及技能点 ▲对象与内置对象 ▲ JSP对象的可见范围 ▲ JSP内置对象介绍 ▲ JSP内置对象综合实例

  4. 主要内容 3.1 对象与内置对象概述 3.2 属性与属性范围 3.3 JSP内置对象介绍 3.4 单元实训

  5. 3.1 对象与内置对象概述 Java是面向对象的。对象是构成程序的基本单位和运行实体,相似的对象可以和传统语言这的变量与类型关系,归并到一类(class)中去。 类是对象的一般性描述,是同种对象的集合与抽象,JSP种的对象就是Java类的实例。 面向对象的基本特征在于其封装性和继承性,通过封装能将对象的定义和对象的实现分开,通过继承能体现类与类之间的关系,由此引出其多态性和动态性。

  6. 3.1 对象与内置对象概述 大致可分为如下四类: 与输入输出(Input/Output)有关的内置对象:out、request、response对象。 与上下文(Context)有关的内置对象:session、application、pageContext对象 与Servlet有关的内置对象:page、config对象。 与错误(Error)处理有关的内置对象:exception对象。

  7. 3.2 属性与属性范围 3.2.1 JSP的四种属性范围 (1)Application范围 用ServletContext接口设置和读取Application范围属性。Application范围对象的值在应用实例的生命期内有效。 (2)Session范围 用HttpSession接口设置和读取Session范围。Session范围的属性在session期间有效。 (3)Request范围 用HttpServletRequest接口设置和读取Request范围的属性。Request范围的属性只在HTTP请求服务期间才有效。 (4)Page 范围 用PageContext接口设置和读取Page范围的属性。这种属性只在单个JSP页面上下文中可见,直到这个页面的全部输出处理完毕后就失效。

  8. 3.2.2 JSP属性范围的设置和读取 在JSP页面中,PageContext属性有一对方法setAttribute / getAttribute用来设置/读取属性。它们还为方便地处理其他范围的属性提供了重载方法: public Object getAttribute(String name, int scope); public void setAttribute(String name, Object value, int scope);

  9. 3.2.3 JSP属性范围的选择 Page范围适合于单个页面中的组件用来互相通讯的数据。 (1)如果数据只在一个页面用到,就用Page范围。 (2)如果数据在多个页面用到,就用Request范围。 (3)如果数据在多个请求中用到,就用Session范围。 (4)如果数据在多个Session中用到,就用Application范围。 (5)如果数据对于多个Session来说是可写的,就要考虑使用实体Bean或消息。

  10. 本节重点和难点 (二)重点、难点: 重点:JSP的四种属性范围 难点: JSP的四种属性范围的选择 (三)讨论: JSP的四种属性范围的选择

  11. 3.3 JSP内置对象介绍 3.3.1 request对象 request对象包含所有请求的信息,它被封装成HttpServletRequest接口。 HttpServletRequest接口所提供的方法可以分为四类: (1)存储和取得属性的方法,如getAttribute()、setAttribute()等。 (2)能够取得请求参数的方法,如getParameter()、getParameterValues()等。 (3)能够取得请求HTTP标头的方法,如getHeader()、getDateHeader()等。 (4)其他方法,如取得请求的URL、IP和session的方法:getRequestURL()、getRemoteAddr()、getSession()等。 可以通过查看某一个JSP页面所生成的Servlet代码,了解在_jspService()方法的上述对象的定义。

  12. 3.3.2 response对象 response对象主要用于动态响应客户端请求(Request),将JSP处理数据后的结果返回到客户端浏览器,它被封装成javax.servlet.http.HttpServletResponse接口。使用response对象可以动态创建Web页面、改变HTTP标头、还可以自动将客户端重定向(Redirct)到一个指定的页面中。另外,如果要向客户端写入Cookies时,response对象也是一种很好的工具。

  13. 3.3.3 out对象 out对象被封装成javax.jsp.JspWriter接口,它提供对Servlet的输出流的访问。 out对象是JSP中使用最频繁的对象。其中,print()和println()方法更加常见,它们把Java对象原始数据联系输入到客户端的缓冲区,不同的是,println()还在后面添加一个空行。不过,这个空行被浏览器解析时忽略,要真正实现在页面中换行,需要通过print("<br>")或println("<br>")方法实现。此外,out对象的clear()等方法可以用来控制管理输出的缓冲区(buffer)和输出流(output stream)。

  14. 3.3.4 session对象 1.会话跟踪(Session Tracking)技术 (1)使用持久Cookies(Persistent Cookies) (2)改写URL(URL-rewriting) (3)表单隐藏域(Hidden Form Field,也称为隐藏字段) (4)使用Servlet的HttpSession API 2. session对象的概念及其生存周期 Session,我们这里译作“会话”,即在一段时间内,单一的客户(Client)与服务器(Server)之间的交互作用。 session与Cookie一样有特定的生存周期。可以使用isNew()方法来得知一个session是否为一个新的session。

  15. 方法 说明 1 void getAttribute(String name) 2 String[] getAttributeNames() 3 long getCreationTime() 4 public String getId() 获取与指定名字name相联系的属性。在JSP1.0中,该方法为getValue(String name) 5 long getLastAccessedTime() 返回session对象中存储的每一个属性对象,其结果为一个枚举类型的实例。在JSP1.0中,该方法为getValueNames() 6 long getMaxInactiveInterval() 返回session创建的时间,最小单位为千分之一秒 返回session创建时JSP引擎为它设的惟一ID号 7 void invalidate() 返回session最后一次被客户请求的时间,最小单位为千分之一秒 8 boolean isNew() 返回两次请求间隔多长时间(最大休眠时间)此session被取消(ms),负值表示session永远不会超时 9 void removeAttribute(String name) 销毁这个session对象,并将其中存放的内容完全抛弃 返回服务器创建的一个session客户端是否已经加入 10 删除session中指定的属性。在JSP1.0中,该方法为removeValue() void setAttribute(String name, java.lang.Object value) 设置指定名字name的属性值value,并将之存储在session对象中。在JSP1.0中,该方法为putValue() 11 long setMaxInactiveInterval() 设置两次请求间隔的最大时间,若超过此时间,该session对象将会失效,时间单位为秒 3.3.4 session对象 3. session对象的方法

  16. 3.3.5 pageContext对象 pageContext对象的主要功能如下: (1)提供了单一API用于管理各类有一定可见范围的对象。 (2)提供了一些方便的访问公共对象的方法。 (3)提供了获取jspWriter的机制。 (4)提供了管理session使用方法的机制。 (5)提供了将页面指令属性开放给脚本环境的机制。 (6)提供了将当前请求传递给应用程序内其他组件的方法。 (7)提供了错误处理机制。

  17. 3.3.6 application对象 application对象被封装成javax.servlet.ServletContext接口,这有助于查找有关servlet引擎和servlet环境的信息,application对象的主要功能就在于取得或更改Servlet的设置。application对象可以为多个应用程序保存信息,对于一个JSP容器而言,每个用户都共同使用一个application对象,这是和session对象的最大区别。application对象是使用范围最广的上下文状态。它允许JSP页面的servlet与包括在同一应用程序中的任何Web组件共享信息 。 config对象被封装成javax.servlet.ServletConfig接口,它常用于存取servlet实例的初始化参数。

  18. 3.3.7 config对象 3.3.8 page对象 page对象表示servlet本身,更确切的说,它代表JSP页面被转译后一个servlet实例,因此,它可以调用Servlet类所定义的方法。 JSP实现类对象的一个句柄,只有在JSP页面的范围内才是合法的。 3.3.9 exception对象 exception对象被封装成java.lang.Throwable接口,它指的就是运行时的异常。

  19. 本节重点和难点 (二)重点、难点: 重点:JSP的各种内置对象 难点:JSP的各种内置对象 (三)讨论: 一个页面中的9个内置对象

  20. 3.4 单元实训 JSP内置对象在JSP网页开发中举足轻重,特别是out、request、reponse、session等对象,使用非常频繁;application、config、exception等对象虽然出镜率不高,但却可以实现计数器、异常处理等特定的功能。本节通过计数器及用户系统登录的综合实例来复习巩固JSP内置对象的使用。

  21. 3.4.1 JSP网页及网站计数器 1. 一个简单的网页计数器 通过包含pageCounter-0.jsp,可以实现简单的页面访问统计。 例程pageCounter-0.jsp的代码如清单3-15所示。 清单3-15 包含页面pageCounter-0.jsp <%!protected int count=0;%> <%=++count%>

  22. 3.4.1 JSP网页及网站计数器 主页面pageCounter-1.jsp演示了如何包含上述页面实现页面访问统计。例程pageCounter-1.jsp的代码如清单3-16所示。 <%@ page contentType="text/html; charset=gb2312" language="java"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>JSP计数器</title> </head> <body> <hr> <div align="center">你是第<jsp:include page="pageCounter-0.jsp" flush="true"/> 位访客</div>  </body> </html>

  23. 3.4.1 JSP网页及网站计数器 执行主页面pageCounter-1.jsp,刷新5次,如图3-15所示

  24. 2. 一个多页面计数器 计数器multiPageCounter-0.jsp提供了为不同页面计数的功能。 application对象对应用来说是共享的,因而可以通过它的setAttribute方法来设置和更新计数器的值。 执行结果如下图所示:

  25. 2. 一个多页面计数器

  26. 3. 一个站点计数器 该站点计数器借助文本文件jspceac\counter.txt,实现站点访问次数的记录,其中使用了文件读写技术。

  27. 3.4.2 用户系统登录简易程序 用户系统登录是站点设计中经常使用的 1. 用户登录页面

  28. 3.4.2 用户系统登录简易 2. 登录验证页面 清单3-22 登录验证页面loginCheck.jsp <%@ page contentType="text/html; charset=gb2312" language="java" errorPage="pub/error.jsp" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <%

  29. 2. 登录验证页面 String userID=request.getParameter("userID"); String pswd=request.getParameter("pswd"); String userType = request.getParameter("userType"); //if(userID==null)userID=""; //验证用户身份,通常需要连接数据库,这里只作一个简单验证 if(userID.equals("wuerlang")){ //将用户关键信息存入session,通常使用JavaBean session.setAttribute("userID", userID); session.setAttribute("userType",userType); //...更新用户的有关登录信息,如登录系统的次数、时间等

  30. 2. 登录验证页面 //将页面导向登录成功页面 response.sendRedirect("loginSuccess.jsp"); } else{%> <%-- 使用jsp:forward标签将页面导向登录失败页面--%> <jsp:forward page="loginError.html"/> <%}%> </body> </html>

  31. 3. 登录成功/失败页面 3. 登录成功/失败页面 (1)登录成功页面loginSuccess.jsp <%@ page contentType="text/html; charset=gb2312" language="java" %> <% String userType = (String)session.getAttribute("userType"); if(userType.equals("admin") || userType.equals("normal")){ %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312">

  32. 3. 登录成功/失败页面 <title>Ok! - 登录成功</title> </head> <body> 登录成功<br> 欢迎您,<!--显示用户有关信息--><%=session.getAttribute("userID")%> <br><br><a href="logout.jsp">注销登出</a> </body></html> <%} else{ response.sendRedirect("login.jsp");} %>

  33. 3. 登录成功/失败页面 (2)登录失败页面loginError.jsp <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>登录错误</title> </head> <body> <div align="center"> 用户名或密码错误。请重新<a href="JavaScript:history.back();">登录</a>。 </div> </body> </html>

  34. 4. 错误页面 4. 错误页面 错误页面error.jsp部署在jspceac\ch03\pub中 清单3-25 系统异常捕捉页面error.jsp <%@ page contentType="text/html; charset=gb2312" language="java" isErrorPage="true" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>系统出现异常</title> </head>  <body> <p>系统出现异常。请把下面的代码发送给系统管理员,谢谢!</p> <p><%=exception.getMessage()%></p> </body> </html>

  35. 5. 退出系统 5. 退出系统 注销登出页面logout.jsp <%@ page contentType="text/html; charset=gb2312" language="java" %> <% session.invalidate(); response.sendRedirect("login.jsp"); %>

  36. 本节重点和难点 (二)重点、难点: 重点:JSP内置对象在JSP网页开发。 难点:JSP内置对象在JSP网页开发 。 (三)讨论: 通过计数器及用户系统登录的综合实例说明JSP内置对象的使用 。

  37. 重点和难点 ◆本章重点JSP内置对象常用方法的基本应用 。 ◆ 本章难点JSP内置对象的综合应用,为JSP动态站点的开发打下良好的基础 。

  38. 本章小结 JSP的内置对象有9个:request对象、reponse对象、out对象、session对象、pagecontext对象、application对象、config对象、page对象和exception对象。 本章首先简要介绍了对象与内置对象的概念,接着介绍了属性与属性范围的概念,然后进入本章主题,逐一详细介绍了JSP内置对象的相关概念,列举了它们的方法,并就常用的方法提供了丰富的演示实例。本章最后,给出了JSP内置对象的两个综合实例。

  39. 作业及练习 一、填空题 1. JSP中有四种属性范围,分别是Application范围、、Request范围和。 2. 在JSP页面中,PageContext属性有一对方法用来设置/读取属性。 3. 使用request对象获取信息,要避免使用空对象,否则会出现异常。 4. 对象主要用于动态响应客户端请求(Request)。 5. 要在JSP页面中实现换行,需要通过out对象的或方法实现。 6. 使用application对象的方法可以返回JSP的引擎名称及版本号。 7. 对象常用于存取servlet实例的初始化参数。

  40. 二、选择题 1. out对象的可见范围是( ),Session对象的可见范围是( ) A. Application范围 B. Session范围 C. Request范围 D. Page范围 2. 提供对Servlet的输出流的访问的JSP内置对象是( ) A. response对象 B. out对象 C. session对象 D. exception对象 3. 要结束out对象的输出流,需要使用该对象的( )方法 A. clear()方法 B. flush()方法 C. close()方法 D. clearBuffer()方法 4. 调用out对象的()方法,可以立即输出缓冲区里的数据 A. clear()方法 B. flush()方法 C. close()方法 D. clearBuffer()方法

  41. 三、判断题 1. request对象的setAttribute()方法可以获取指定属性的值。( ) 2. 调用out对象的clear()方法,可以清除缓冲区的内容,同时把数据输出到客户端。(F) 3. Session的信息保存在服务器端,Session的id保存在客户机的Cookie中。( ) 4. 不同的用户可以共享session和application的信息。( ) 5. session对象的invalidate()方法和removeAttribute()方法是等价的。( ) 6. pageContext属性默认在当前页面是共享的。( )

More Related