820 likes | 1.01k Views
JSP 内置对象. 课 题 JSP 内置对象( Exception 、 application 、 page 、 PageContext 、 config )及其应用 目的要求 掌握 Exception 、 application 、 page 、 PageContext 、 config 对象的属性、方法及应用 教学重点 JSP 内置对象的含义、属性、方法及使用 教学难点 各对象的综合运用 教学课时 4 (含 2 课时上机) 教学方法 讲解、示例与启发式教学相结合 . 教学内容和步骤
E N D
课 题 JSP内置对象(Exception、application、page、PageContext、config)及其应用课 题 JSP内置对象(Exception、application、page、PageContext、config)及其应用 目的要求 掌握Exception、application、page、PageContext、config对象的属性、方法及应用 教学重点 JSP内置对象的含义、属性、方法及使用 教学难点 各对象的综合运用 教学课时 4(含2课时上机) 教学方法 讲解、示例与启发式教学相结合
教学内容和步骤 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对象。
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对象中含存 储的对象的名字。
⑷public void removeAttribute(String name) ⑸public String getMajorVersion()取得服务器支持的主版本号。 ⑹public String getMinorVersion()取得服务器支持的次版本号。 ⑺public String getServerInfo() ⑻public String getRealPath()
例1:application.jsp <HTML> <HEAD> <TITLE>application变量的使用</TITLE> </HEAD> <BODY> <CENTER> <FONT SIZE = 5 COLOR = blue>application变量的使用</FONT> </CENTER> <HR> <P></P> <%
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变量值 %>
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"); %>
<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. --%>
<% 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()格式。
6.2 config对象 config对象是执行javax.servlet.ServletConfig的对象。 其主要方法有: ⑴ String getInitParameter( String name ) ; 返回名称为name的促使参数的值。 ⑵ Enumeration getInitParameterNames() ; 返回这个JSP所有的促使参数的名称集合。
例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)); } %>
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;
ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try {
_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();
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对象
例外网页的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 );
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 ) ; 按页面、请求、会话和应用程序共享范围搜索已命名的属性。
⑸ void removeAttribute( String name, int scope ) ; void removeAttribute( String name ) ; 移除指定名称和共享范围的属性。 void forward( String url ) ; 将页面导航到指定的URL。 ⑺ Enumeration getAttributeNamesScope( int scope ) ; 取得指定共享范围内的所有属性名称的集合。 (8)int getAttributeScope( String name ) ; 取得指定属性的共享范围。
(9)Exception getException() ; 取得页面的exception对象。 (10)JspWriter getOut() ; 取得页面的out对象。 (11)Object getPage() ; 取得页面的page对象。 (12)ServletRequest getRequest() ; 取得页面的request对象。
(13)ServletResponse getResponse() ; 取得页面的response对象。 (14)ServletConfig getConfig() ; 取得页面的config对象。 (15)ServletContext getServletContext() ; 取得页面的application对象。 (16)HttpSession getSession() ; 取得页面的session对象。
成员: int PAGE_SCOPE = 1 - 页面共享范围 int REQUEST_SCOPE = 2 - 请求共享范围 int SESSION_SCOPE = 3 - 会话共享范围 int APPLICATION_SCOPE = 4 - 应用程序共享范围
例4: <% String sessionProduct=(String)pageContext.getAttribute(“product”,pageContext.SESSION_SCOPE); applicationProduct=(String)pageContext.getAttribute(“product”,pageContext.APPLICATION_SCOPE); %>
6.4 Page对象 Page对象的类型是java.lang.Object类,是JSP的Servlet class实体参考,代表jsp页面编译成的Servlet实例,一般不用,和this的作用是一样的。 6.5 exception对象 exception对象是执行java.lang.Throwable类的对象,其主要功能是捕捉或者需要程序进行处理异常。
例5:sample.jsp <HTML> <HEAD><TITLE>errorPage example</TITLE></HEAD> <BODY> <%@ page errorPage="errorPage.jsp" %> <%! int i=0;%> <%=7/i%> </BODY> </HTML>
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>
例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对象被删除时执行
⑷ session-end events: 当session对象被删除时执行 上述四个事件对应的方法是: ⑸ application-start---applicationInit() ⑹ application-end- --applicationDestory() ⑺ session-start ---sessionInit(HttpSession session) ⑻ session-end ---sessionDestory(HttpSession session) 注:① 此文件必须放在WEB应用程序根目录下 ② 此文件中各事件发生顺序有先后
例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) {
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")); } %>
作 业 ①:对教案中每个示例在机器上运行验证 ②:自编JSP页面利用PageContext对象产生request对象并调用request的方法获取客户端窗体提交过来的数据在浏览器中显示。 ③:编写一个Global.jsa文件使访问该网站的客户都能在浏览器窗口中得到“欢迎你,您好”的信息。 教学总结:
上机实验六:(2课时) JSP内置对象 (Exception、application、page、 PageContext、config)及其应用 一、实验目的及要求 1.掌握Exception、application、page、 PageContext、config的属性、方法及使用 2.掌握Global.jsa文件的编写与使用环境和使用方法 3.掌握application对象设置变量作用域的方法及如何使用具有这种作用域的变量。 二、实验环境 Myeclipse、Tomcat、JDK
三、实验内容 1. 上机调试教案中全部示例并分析结果 2.下述几个页面是成绩单制作系统,其中SchoolReportCard.jsp是起始页面,试上机调试并运行. ⑴ SchoolReportCard.jsp <%@ page language="java" %> String txtTeacherName=request.getParameter("txtTeacherName"), txtClassName=request.getParameter("txtClassName"), txtCourseNum=request.getParameter("txtCourseNum"),
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=""; } //-->
</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> </p>
<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>
<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">
班级名称: </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">
科目数: </font> </div> </td> <td> <font face="标楷体" size="5"> <input type="text" name="txtCourseNum" value='<%=txtCourseNum==null?"":txtCourseNum%>' > </font> </td> </tr> <tr> <td>
<p> <input type="submit" name="Submit" value=" 确定"> <input type="button" name="reset" value="重写 " onclick="cleardata();"> </p> </form> </div> </body> </html>
⑵ 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 = "",
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() ); }
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 != "" ){ %>
<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) ); %>
<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="标楷体">
请输入科目名称 </font></p> <hr width="50%"> <p> </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">
班级名称 </font> <%=className%> <font color="#6666FF"> 学生人数 </font> <%=studentNum%> </font> </p> <jsp:include page="CourseNameTable.jsp" flush="true" > <jsp:param name="courseNum" value='<%=courseNum%>' /> </jsp:include>
<p> <input type="submit" name="Submit" value=" 确定"> <input type="button" name="reset" value=" 重填" onclick="cleardata();"> </p> </form> <p> </p> </div> </body> </html>
⑶ 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> </p> <p>
<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>