1 / 82

JSP 内置对象

JSP 内置对象. 课  题   JSP 内置对象( Exception 、 application 、 page 、 PageContext 、 config )及其应用 目的要求 掌握 Exception 、 application 、 page 、 PageContext 、 config 对象的属性、方法及应用 教学重点   JSP 内置对象的含义、属性、方法及使用 教学难点 各对象的综合运用 教学课时 4 (含 2 课时上机) 教学方法 讲解、示例与启发式教学相结合  . 教学内容和步骤

danae
Download Presentation

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内置对象

  2. 课  题  JSP内置对象(Exception、application、page、PageContext、config)及其应用课  题  JSP内置对象(Exception、application、page、PageContext、config)及其应用 目的要求 掌握Exception、application、page、PageContext、config对象的属性、方法及应用 教学重点  JSP内置对象的含义、属性、方法及使用 教学难点 各对象的综合运用 教学课时 4(含2课时上机) 教学方法 讲解、示例与启发式教学相结合  

  3. 教学内容和步骤 JSP内置对象是不需要声明,直接可以在JSP中使用的对象,JSP有以下几种内置对象: request, reponse, out, session, application, config, pagecontext, page, exception. 6.1 aplication对象 6.1.1 什么是application application是执行javax.Servlet.ServletContext界面的类,主要用于保存用户信息,代码片段的运行环境; 它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享。服务器启动后就产生了这个application对象,当客户再所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。

  4. 6.1.2 Application对象常用方法 (1) public void setAttribute(String key,Object obj): 将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个索引关键字。 (2)public Object getAttribute(String key): 获取application对象中含有关 键字的对象。 (3)public Enumeration getAttributeNames():获取application对象中含存 储的对象的名字。

  5. ⑷public void removeAttribute(String name) ⑸public String getMajorVersion()取得服务器支持的主版本号。 ⑹public String getMinorVersion()取得服务器支持的次版本号。 ⑺public String getServerInfo() ⑻public String getRealPath()

  6. 例1:application.jsp <HTML> <HEAD> <TITLE>application变量的使用</TITLE> </HEAD> <BODY> <CENTER> <FONT SIZE = 5 COLOR = blue>application变量的使用</FONT> </CENTER> <HR> <P></P> <%

  7. Object obj = null; String strNum = (String)application.getAttribute("Num"); int Num = 0; //检查是否Num变量是否可取得 if(strNum != null) Num = Integer.parseInt(strNum) + 1; //将取得的值增加1 application.setAttribute("Num", String.valueOf(Num)); //起始Num变量值 %>

  8. application对象中的<Font color = blue>Num</Font>变量值为 <Font color = red><%= Num %></Font><BR> </BODY> </HTML> 例2 APPLICATION.JSP <%-- Define application-level settings --%> <% application.setAttribute("appName", "Application Object Example"); application.setAttribute("counter","0"); %>

  9. <HTML> <BODY> <H1>Application Object Example </H1> <h2>Display the default application settings</h2> <%-- Access or modify application parameters from this or any other JSP page in the application. --%>

  10. <% String appName = (String) application.getAttribute("appName"); %> The name of this application is "<%= appName %>" <br><br> <% String counter = (String) application.getAttribute("counter"); %> The counter value = <%= counter %> </BODY> </HTML> 注:在有些服务器中支持application.method()这种格式,但在有些服务器中刚支持以getServletContext().method()格式。

  11. 6.2 config对象 config对象是执行javax.servlet.ServletConfig的对象。 其主要方法有: ⑴ String getInitParameter( String name ) ; 返回名称为name的促使参数的值。 ⑵ Enumeration getInitParameterNames() ; 返回这个JSP所有的促使参数的名称集合。

  12. 例3: <%@ page contentType="text/html;charset=GB2312" import="java.util.Enumeration"%> <% Enumeration configparams=config.getInitParameterNames(); while(configparams.hasMoreElements()) {String s=(String)configparams.nextElement(); out.println(s); out.println(config.getInitParameter(s)); } %>

  13. 6.3 pageContext 对象 pageContext 对象是执行javax.servlet.jsp.PageContext界面的类,pageContext对象存储本JSP页面相关信息,如属性、内建对象等。 6.3.1 pageContext 对象实质 分析jsp文件编译后产生的java文件 public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null;

  14. ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try {

  15. _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html;charset=GB2312"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig();

  16. session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; 其中:pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);中的参数意义如下: this:表示JSP程序的Servlet Class对象 request:表示ServletRequest对象 response:表示ServletResponse对象

  17. 例外网页的URL字符串:errorPageURL ,是否需要用到session对象 out对象的缓冲区大小,是否需要用到autoFlush属性 其实这些参数就是page指令指定的属性设定值。 如:<<@ page language=”java” session=”false” errorPage=”errorPage.jsp”buffer=”10kb” autoFlush=”False” %> 那么取得pageContext的方式就会是 _jspxFactory.getPageContext(this, request, response, ”errorPage.jsp”, false , 10240, false );

  18. 6.3.2 pageContext 对象主要方法 ⑴ void setAttribute( String name, Object value, int scope ) ; ⑵ void setAttribute( String name, Object value ) ; 在指定的共享范围内设置属性。 ⑶ Object getAttribute( String name, int scope ) ; Object getAttribute( String name ) ; 取得指定共享范围内以name为名字的属性值。 object findAttribute( String name ) ; 按页面、请求、会话和应用程序共享范围搜索已命名的属性。

  19. ⑸ void removeAttribute( String name, int scope ) ; void removeAttribute( String name ) ; 移除指定名称和共享范围的属性。 void forward( String url ) ; 将页面导航到指定的URL。 ⑺ Enumeration getAttributeNamesScope( int scope ) ; 取得指定共享范围内的所有属性名称的集合。 (8)int getAttributeScope( String name ) ; 取得指定属性的共享范围。

  20. (9)Exception getException() ; 取得页面的exception对象。 (10)JspWriter getOut() ; 取得页面的out对象。 (11)Object getPage() ; 取得页面的page对象。 (12)ServletRequest getRequest() ; 取得页面的request对象。

  21. (13)ServletResponse getResponse() ; 取得页面的response对象。 (14)ServletConfig getConfig() ; 取得页面的config对象。 (15)ServletContext getServletContext() ; 取得页面的application对象。 (16)HttpSession getSession() ; 取得页面的session对象。

  22. 成员: int PAGE_SCOPE = 1 - 页面共享范围 int REQUEST_SCOPE = 2 - 请求共享范围 int SESSION_SCOPE = 3 - 会话共享范围 int APPLICATION_SCOPE = 4 - 应用程序共享范围

  23. 例4: <% String sessionProduct=(String)pageContext.getAttribute(“product”,pageContext.SESSION_SCOPE); applicationProduct=(String)pageContext.getAttribute(“product”,pageContext.APPLICATION_SCOPE); %>

  24. 6.4 Page对象 Page对象的类型是java.lang.Object类,是JSP的Servlet class实体参考,代表jsp页面编译成的Servlet实例,一般不用,和this的作用是一样的。 6.5 exception对象 exception对象是执行java.lang.Throwable类的对象,其主要功能是捕捉或者需要程序进行处理异常。

  25. 例5:sample.jsp <HTML> <HEAD><TITLE>errorPage example</TITLE></HEAD> <BODY> <%@ page errorPage="errorPage.jsp" %> <%! int i=0;%> <%=7/i%> </BODY> </HTML>

  26. errorPage.jsp <HTML> <HEAD><TITLE>error page</TITLE></HEAD> <BODY> <%@ page isErrorPage="true"%> <%=exception.toString()%><p> <%=exception.getMessage()%><p> <%=exception.getLocalizedMessage()%><p> <% exception.printStackTrace();%> </BODY> </HTML>

  27. 例6、例7(略) 6.6 GLOBAL.JSA文件 有些服务器支持GLOBAL.JSA文件,处理application、session对象创建与注销的过程,它在服务器启动的时候或关闭的时候执行。当有application、session对象被创建或注销时,GLOBAL.JSA文件也会被执行。GLOBAL.JSA文件主要处理四个事件: ⑴ application-start events:当application对象被创建时执行 ⑵ session-start events: 当session对象被创建时执行 ⑶ application-end events:当application对象被删除时执行

  28. ⑷ session-end events: 当session对象被删除时执行 上述四个事件对应的方法是: ⑸ application-start---applicationInit() ⑹ application-end- --applicationDestory() ⑺ session-start ---sessionInit(HttpSession session) ⑻ session-end ---sessionDestory(HttpSession session) 注:① 此文件必须放在WEB应用程序根目录下 ② 此文件中各事件发生顺序有先后

  29. 例8 <%! public void sessionInit(HttpSession session) { System.err.println("session init: " + session.getId()); session.setAttribute("IDString","Session ID: " + session.getId()); } %> <%! public void sessionDestroy(HttpSession session) {

  30. System.err.println("session destroy: " + session.getId()); } %> <%! public void applicationInit() { application.setAttribute("appName", "MyApp"); } %> <%! public void applicationDestroy() { System.out.println("Application terminated: " + (String) application.getAttribute("appName")); } %>

  31. 作  业 ①:对教案中每个示例在机器上运行验证  ②:自编JSP页面利用PageContext对象产生request对象并调用request的方法获取客户端窗体提交过来的数据在浏览器中显示。 ③:编写一个Global.jsa文件使访问该网站的客户都能在浏览器窗口中得到“欢迎你,您好”的信息。         教学总结:

  32. 上机实验六:(2课时) JSP内置对象 (Exception、application、page、 PageContext、config)及其应用 一、实验目的及要求 1.掌握Exception、application、page、 PageContext、config的属性、方法及使用 2.掌握Global.jsa文件的编写与使用环境和使用方法 3.掌握application对象设置变量作用域的方法及如何使用具有这种作用域的变量。 二、实验环境 Myeclipse、Tomcat、JDK

  33. 三、实验内容 1. 上机调试教案中全部示例并分析结果 2.下述几个页面是成绩单制作系统,其中SchoolReportCard.jsp是起始页面,试上机调试并运行. ⑴ SchoolReportCard.jsp <%@ page language="java" %> String txtTeacherName=request.getParameter("txtTeacherName"), txtClassName=request.getParameter("txtClassName"), txtCourseNum=request.getParameter("txtCourseNum"),

  34. txtStudentNum=request.getParameter("txtStudentNum"); %> <html> <head> <script language="javascript" > <!-- function cleardata(){ document.frm.txtTeacherName.value=""; document.frm.txtClassName.value=""; document.frm.txtCourseNum.value=""; document.frm.txtStudentNum.value=""; } //-->

  35. </script> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=big5"> </head> <body bgcolor="#FFCCCC"> <div align="center"> <p><font size="7" face="标楷体"> 成绩单制作系统 </font></p> <hr width="50%" align="center"> <p>&nbsp;</p>

  36. <form method="post" action="InputCourseName.jsp" name="frm"> <table width="50%" border="1" cellpadding="5" cellspacing="2" bgcolor="#CCCCFF" bordercolor="#FF6666"> <tr> <td width="50%"> <div align="right"> <font face="标楷体" size="5"> 老师姓名: </font> </div> </td>

  37. <td width="50%"> <font face="标楷体" size="5"> <input type="text" name="txtTeacherName" value='<%=txtTeacherName==null?"":txtTeacherName%>' > </font> </td> </tr> <tr> <td width="50%"> <div align="right"> <font face="标楷体" size="5">

  38. 班级名称: </font> </div> </td> <td width="50%"> <font face="标楷体" size="5"> <input type="text" name="txtClassName" value='<%=txtClassName==null?"":txtClassName%>' > </font> </td> </tr> <tr> <td> <div align="right"> <font face="标楷体" size="5">

  39. 科目数: </font> </div> </td> <td> <font face="标楷体" size="5"> <input type="text" name="txtCourseNum" value='<%=txtCourseNum==null?"":txtCourseNum%>' > </font> </td> </tr> <tr> <td>

  40. <p> <input type="submit" name="Submit" value=" 确定"> <input type="button" name="reset" value="重写 " onclick="cleardata();"> </p> </form> </div> </body> </html>

  41. ⑵ InputCourseName.jsp <%@ page language="java" %> <script language="javascript" > <!-- function cleardata(){ for( i=0; i<document.frm.txtCourseName.length; i++ ) document.frm.txtCourseName[i].value=""; } //--> </script> <% String errorMessage = "",

  42. teacherName = request.getParameter("txtTeacherName").trim(), className = request.getParameter("txtClassName").trim(); int studentNum=0, courseNum=0; if( teacherName.length()==0 ) errorMessage += "必须输入老师姓名<br>"; if( className.length()==0 ) errorMessage += "必须输入班级名称<br>"; try{ courseNum= Integer.parseInt( request.getParameter("txtCourseNum").trim() ); }

  43. catch( NumberFormatException nfex ){ } if( courseNum < 1 ) errorMessage += "科目数不正确<br>"; try{ studentNum = Integer.parseInt( request.getParameter("txtStudentNum").trim() ); } catch( NumberFormatException nfex ){ } if( studentNum < 1 ) errorMessage += "班级人数不正确<br>"; if( errorMessage != "" ){ %>

  44. <jsp:forward page="DataError.jsp" > <jsp:param name="errorMesage" value='<%=errorMessage%>' /> </jsp:forward> <% } session.setAttribute( "teacherName", teacherName ); session.setAttribute( "className", className ); session.setAttribute( "studentNum", new Integer(studentNum) ); session.setAttribute( "courseNum", new Integer(courseNum) ); %>

  45. <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=big5"> </head> <body bgcolor="#FFCCCC"> <div align="center"> <p><font size="7" face="标楷体">

  46. 请输入科目名称 </font></p> <hr width="50%"> <p>&nbsp;</p> <form method="post" action="InputScore.jsp" name="frm"> <p> <font color="#6666FF" face="标楷体" size="4"> 老师姓名 </font> <font face="标楷体" size="4"> <%=teacherName%> <font color="#6666FF">

  47. 班级名称 </font> <%=className%> <font color="#6666FF"> 学生人数 </font> <%=studentNum%> </font> </p> <jsp:include page="CourseNameTable.jsp" flush="true" > <jsp:param name="courseNum" value='<%=courseNum%>' /> </jsp:include>

  48. <p> <input type="submit" name="Submit" value=" 确定"> <input type="button" name="reset" value=" 重填" onclick="cleardata();"> </p> </form> <p>&nbsp;</p> </div> </body> </html>

  49. ⑶ DataError.jsp <%@ page language="java" %> <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=big5"> </head> <body bgcolor="#FF9999"> <form method="post" action="SchoolReportCard.jsp"> <div align="center"> <p>&nbsp;</p> <p>

  50. <font size="5" face="标楷体"> <input type="hidden" name="txtTeacherName" value='<%=request.getParameter("txtTeacherName")%>' > <input type="hidden" name="txtClassName" value='<%=request.getParameter("txtClassName")%>' > <input type="hidden" name="txtCourseNum" value='<%=request.getParameter("txtCourseNum")%>' > <input type="hidden" name="txtStudentNum" value='<%=request.getParameter("txtStudentNum")%>' > </font> </p> <p>

More Related