1 / 43

互联网软件开发与应用

互联网软件开发与应用. 任课教师:陆 铭 联系电话: 66134267 QQ: 22839978 PoPo:richard.du@163.com 教学网站: mingler.ccshu.org. 第九章 JSP 技术介绍. 9.1 JSP 简介 9.2 JSP 的组成. 9.1 JSP 简介. JSP 是 Java Server Page 的缩写,是 Servlet 的扩展,目的是简化建立和管理动态网站的工作 JSP 技术是 J2EE 的一个关键技术,在更高的层次上抽象 Servlet

veata
Download Presentation

互联网软件开发与应用

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. 互联网软件开发与应用 任课教师:陆 铭 联系电话:66134267 QQ: 22839978 PoPo:richard.du@163.com 教学网站:mingler.ccshu.org

  2. 第九章 JSP技术介绍 9.1 JSP简介 9.2 JSP的组成

  3. 9.1 JSP简介 • JSP是Java Server Page的缩写,是Servlet的扩展,目的是简化建立和管理动态网站的工作 • JSP技术是J2EE的一个关键技术,在更高的层次上抽象Servlet • 可以让常规静态HTML与动态产生的内容相结合,看起来像一个网页,却作为Servlet来运行 • 现在许多商业应用服务器支持JSP技术,如JRun、IBM WebSphere、BEA Weblogic等 • 使用JSP比用Servlet更简单 • 如果有一个支持JSP的web服务器,并有一个JSP文件,可以把它放到任何静态HTML文件可以放置的位置,不用编译、不用打包、也不用进行ClassPath的设置,就可以像访问普通网页那样访问它,服务器会自动帮你做好其他工作

  4. JSP简介 • JSP文件看起来像一个普通的静态HTML文件,只不过里面包含了一些Java代码 • 使用 .jsp 作为文件扩展名,告诉服务器其文件特征 • 当访问JSP网页时,该文件首先会被JSP引擎翻译为一个Java源文件,即Servlet并进行编译,然后像其他Servlet一样,由Servlet引擎来处理 • Servlet引擎装载这个类、处理来自客户的请求、把结果返回客户等 • 以后再有客户访问这个网页时,只要文件没有发生过更改, JSP引擎就直接调用已经装载的Servlet;如果已经做过修改,就会再次执行前述过程:翻译、编译、装载、执行等 • 这一方法称为“第一人惩罚” • 只有首次访问的时候要执行一系列的上述过程,所以会花费一些时间,以后的访问就可以加快速度

  5. Servlet所带来的便利 • JSP是建立在Servlet技术基础之上的,尽管Servlet功能在很多方面都很强大,但它通常属于程序员专有领域 • 在许多基于Java Servlet的应用程序中,处理请求和产生应答是由同一个Servlet类来执行的 • Servlet包含了请求的处理以及商务逻辑(通过isOrderInfoValid()和saveOrderInfo()这样方法来实现的),并且产生应答的HTML代码 • 一个更加结构化的Servlet应用程序可以将处理过程分成各个不同的部分,封装在各种可重用的工具类中,也可以使用一个单独的类库来产生应答中的实际的HTML元素

  6. Servlet所带来的问题 • 开发和维护应用程序的所有部分需要有深厚的Java编程知识,因为处理代码和HTML元素是交织在一起的 • 改变应用程序的外观和风格,或者加入对某种新类型客户机的支持时,都需要更新并重新编译Servlet代码 • 很难利用网页开发工具的优势来设计应用程序界面。如果用这些工具来开发网页布局的话,生成的HTML代码必须被手工嵌入到Servlet代码中,费时易错枯燥 • 解决方案 • 引入JSP可以将请求处理和商务逻辑与外观呈现分离开来 • 不是将HTML嵌入到代码中,而是将所有静态HTMLV放到页面中,就像一个普通的网页一样,然后加入一些JSP元素来产生页面的动态部分 • 对请求的处理工作可以留给Servlet程序员来做,商务逻辑则可以由JavaBeans和EJB组件来处理

  7. 引入JSP的优势 • 将请求处理和商务逻辑与外观呈现分开后,允许我们将开发任务分派给拥有不同技术的人来完成 • Java程序员负责实现请求处理和商务逻辑部分,网页设计师实现用户界面 • 这两组人员都可以使用手边最好用的工具软件来完成任务 • 其结果是 • 我们得到了更为多产的开发过程 • 也使我们能够单独改变应用程序的某个部分 • 如修改商务规则,不必触动用户界面 • 网页设计师即使没有任何编程技术,也可以使用JSP标准行为和JSTL库以及开源组织或商业公司提供的Java组件,来开发拥有许多动态特性的web应用程序

  8. Application Server Enterprise Server Request Response JSP Web Browser DB JavaBean JSP应用模式一 • JSP技术规范给出了两种使用JSP开发web应用的方式,称之为模型一和模型二,两种模型的主要差别在于它们处理业务的流程不同 • 模型一:JSP+JavaBean模型 • JSP页面独自响应请求并将处理结果返回给客户,所有的数据通过JavaBean来处理,JSP实现页面的表现 • 模型一实现了页面表现和业务逻辑的分离 • 模型一的缺陷 • 使用这种方式需要在JSP页面使用大量的Java代码,当需要处理的业务逻辑很复杂时,这种情况会变得很糟糕,大量嵌入的代码使整个页面程序变得十分复杂 • 模型一不能满足大型应用的需要,但因为模型简单,不用涉及诸多要素,可以很好地满足小型应用的需要

  9. Application Server Enterprise Server JSP Request Response DB Web Browser (view) JSP JSP应用模式二 • 模型二:JSP+Servlet+JavaBean模型 • 该模型结合了JSP和Servlet技术,充分利用了JSP和Servlet两种技术原有的优势 • 模型使用JSP技术来表现页面,使用Servlet技术完成大量的事务处理,使用Bean来存储数据 • Servlet用来处理请求的事务,充当一个控制者的角色,并负责向客户发送请求,创建JSP需要的Bean和对象,然后根据用户请求的行为,决定将哪个JSP页面发送给客户 • 模型二具有更清晰的页面表现,清楚的开发角色划分,可以充分利用开发团队中的网页设计人员和Java开发人员 • 网页设计人员可以充分发挥自己的美术和设计才能来充分表现页面,程序编写人员可以充分发挥自己的业务逻辑处理思维,实现项目中的业务处理 Instantiate Servlets View (Model) JavaBean

  10. JSP页面构成 • JSP是基于文本的文件,包含两种类型的文本 • 静态模板数据:任何基于文本格式的都可以被表示,HTML、XML、SVG、WML • 动态数据:JSP元素构成 • JSP页面的构成 • 指令(<% @ …… %>) 引用包含的类 • JSP元素 • jsp:useBean元素创建一个包含对象集的场所,并初始化一个变量指向该对象 • jsp:include元素发送一个请求到另外一个页面,也包含调用页面中相应的响应 • Scriptlets(<% …… %>) 获得本地的请求参数值,重申本地名称集,有条件地插入HTML文本到输出 • 表达式(<% =….. %>) 插入本地值到输出中

  11. JSP页面执行过程 • 当web服务器接受到web客户的一个JSP文件请求时,对JSP文件进行语法分析并生产Java Servlet源文件,然后进行编译 • 一般情况下,Servlet源文件的生成和编译仅在初次调用JSP时发生,如果原始的JSP文件被更新,web服务器将检测所做的更新,执行之前重新生成Servlet并进行编译 • 参考 P.222,阅读教材内容 JSP 文件: <%@ page import="java.util.*" %> <%@ page contentType="text/html; charset=gb2312" %> <html> <body> 你好!今天是 <% Date today= new Date( ); = today.getDate( ) %>号, 星期<% =toDay.getDay %> </body> </html> Servlet 文件: import java.util.* ; response.setContentType("text/html; charset=gb2312"); out = pageContext.getOut( ); out.write("\r\n\r\n<html>\r\n<body>\r\n你好!今天是\r\n"); Date teday = new Date( ); out.print(today.getDate( )); out.write("号,星期"); out.print(today.getDay( )); out.write(" \r\n <\body> \r\n </html> \r\n");

  12. JSP与ASP的简单比较 • JSP与ASP非常相似,两者都提供在HTML代码中混合某种程序代码、并由语言引擎解释执行程序代码的能力 • 在ASP和JSP环境下,HTML代码主要负责描述信息的显示样式,程序代码用来描述处理逻辑 • 普通的HTML页面只依赖于web服务器,而ASP和JSP页面需要附加的语言引擎分析和执行程序代码 • 程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送到浏览器 • ASP和JSP都是面向web服务器的技术,客户端浏览器不需要任何添加的软件支持

  13. 9.2 JSP的组成 JSP主要由模板元素、指令元素、动作元素、脚本元素、声明、表达式、Scriptlets和JSP内建对象组成

  14. 9.2.1 模板元素 • 模板元素是指JSP的静态HTML或XML内容,是JSP显示的重要成分,这部分的任务主要由制作网页的美工来完成 • 在JSP编译时,将把这些模板元素编译到Servlet中,当客户请求JSP时,就会将这些模板元素一字不变地发送到客户端

  15. 9.2.2 指令元素 • 指令是用于从JSP发送到容器上的一个信息 • 指令用来设置全局变量,声明类要实现的方法和输入内容的类型等 • 指令的作用并不是向客户产生任何输出,指令元素只是为编译提供全局信息 • 所有指令都在JSP整个文件范围内有效 • 指令元素的格式 <% @ 指令类名称 属性名1="参数值", 属性名2="参数值" %> • JSP指令的类型 • 页面指令、include指令、taglib指令

  16. 页面指令 • 页面指令定义了各种影响到整个页面的重要属性 • 一个JSP页面可以包含多个页面指令,在编译时,所有的页面指令都被抽出来同时应用到一个页面中。除了Import外,其他页面指令定义的属性值只能出现一次 • 页面指令的格式 <% @ page 属性%> • 常用的页面指令属性表(参见P.224 表9.1) Directive.jsp (页面指令举例) <% @ page language="java" import="java.util.data" session="ture" Buffer="12k" autoFlash="true" info="a test directive jsp page" errorPage="error.jsp" isErrorPage="false" contentType="text/html; charset=gb3212" %> <html> <body> <h1>a test directive page</h1> <% =new java.util.Data() %> </body> </html>

  17. Include指令 • Include指令通知容器将当前JSP页面中内嵌的、在指定位置上的资源内容包含进来。被包含的文件内容可以被JSP解析,这种解析发生在编译期间 • Include指令的格式 <% @ include file="filename" %> • 需要注意,一经编译,内容不可变,如果要改变file的内容,必须重新编译JSP文件 • 简单的include指令的例子 <% @ page contentType="text/html; charset=gb2312" %> <% @ include file="head.jsp" %> <% @ include file="body.jsp" %> <% @ include file="footer.jsp" %>

  18. Taglib指令 • 该指令允许用户自定义标签 • 自定义标签的步骤 • 首先开发用户的开发标签库,为标签库编写 .tld配置文件 • 然后在JSP页面里使用自定义标签 • 如此,JSP标签库得到不断加强,最新的规范增加了JSTL标签库 • JSP的标签库在页面里的定义格式 <% @ taglib uri="taglibURI" prefix="tagPrefix" %> • uri用来表示标签描述符,tagPrefix定义了在JSP页面里引用标签时的前缀,这些前缀不可以是jsp、jspx、java、javax、sun、servlet、sunw等

  19. 9.2.3 脚本元素 • 脚本元素把JSP的所有内容都集中在一起,它通常是用Java编写的脚本代码 • 脚本元素允许变量声明和函数声明,可以包含任意的Java脚本代码和对表达式的求值 • 这些声明编译成Servlet时,是Servlet的属性和操作 • 脚本元素有三种类型 • 声明(Declaration) • 表达式(Expression) • Scriptlets

  20. 声明(Declaration) Declaration.jsp (在JSP页面中使用声明) <% @ page contentType="text/html; charset=gb2312"%> <% ! Private int value=10; //定义变量 public int getValue( ) { //定义方法 return value; } %> <html> <body> <% //使用定义的变量 for (int i=0; i<value; i++) out.printlen("<br>Test"); <% //使用定义的方法 for (int i=0; i<getValue( ); i++) out.printlen("<br>Test"); %> </body> </html> • JSP中的声明是一段Java代码,用来定义在产生的类文件中类的属性和方法。声明后的变量和方法可以在JSP的任意地方使用 • 声明的格式 <% ! Variable declaration 变量声明 Method declaration (s) 方法声明 %> • 声明后的变量和方法,在JSP页面的其他地方可以直接引用。如果在JSP中要大量使用某个函数,就要先声明这个函数,然后在后面进行应用,可以节省代码

  21. 表达式(Expression) expression.jsp (表达式的例子) <% @page contentType="text/html; charset=gb2312"%> <% ! Private int value=10; public int getValue() { return Value; } %> <html> <body> 第一个表达式,value的值是<% =value %> <br> <!– 注意表达式的使用 --> 第二个表达式,value的值是<% =getValue() %> <br> 第三个表达式,value的值是<% ="现在的时间是:"+new java.util.data().toString() %> </body> </html> • 表达式是在JSP请求处理阶段计算它的值,所得到的结果转换成字符串并与模板数据组合在一起 • 表达式在页面的位置,就是该表达式计算结果所处的位置 • 表达式的语法 <% =some java exprssion %> • 如果表达式的任何部分是一个对象,可以使用toString( )进行转换

  22. Scriptlets Scriptlets.jsp (scriptlets使用实例) <%@page contentType="text/html; charset=gb2312" import="java.util.Data" %> <html> <body> 在这段代码中声明了两个变量str和date<br> <% String str; Data date = new Date( ); Str="现在时间发:"+date.toString( ); %> <hr> 我们在另一段scriptlets里使用前面的scriptlets <% out.println(str); %> <%-- 注意,这里是JSP的注释 --%> </body> </html> • Scriptlets是一段可以在处理请求时执行的Java代码 • Scriptlets包含在<%和%>之间,它可以产生输出,并将输出发送到客户的输出流中,也可以是一些流程控制语句,其中还可以包含一些合法的Java注释 • 在被编译的类中,多个Scriptlets可以按照在JSP中出现的顺序合并成一个Scriptlets • Scriptlets像其他的Java代码或者方法一样,可以修改在它内部的对象,作为方法引用的结果 • Scriptlets的使用方法 <% java code statement %> • Scriptlets的语法就是Java的语法,只是将Java代码包括在<%和%>之间。在Scriptlets中可以使用对象、变量和函数 • 说明:JSP中注释的使用 • Java标准注释(// —单行注释,/* */—多行注释) • XML标准注释<!-- --> • <% -- -- %>

  23. 9.2.4 动作元素 • 动作元素在请求处理阶段期作用 • JSP规范定义了一系列的标准动作,用JSP作为前缀 • 这些标准动作不管容器是如何实现的,每个web容器都必须提供这些操作类型 • 标准动作为网页设计者提供基本的功能,其他厂商可以自由提供其他的非标准的动作以增强功能 • 标准动作 • <jsp:useBean> • <jsp:setProperty> • <jsp:getProperty> • <jsp:param> • <jsp:include> • <jsp:forward> • <jsp:plugin>

  24. <jsp:useBean> demobean.jsp (useBean的引用) <% @page contentType="text/html; charset=gb2312" %> <jasp:useBean id="times" scope="page" class="DemoBean"> <% times.setTimes(5); %> </jsp:useBean> <html> <body> <% for (int i=0; i<times.getTimes(); i++) out.println(times.service()); %> </body> </html> demobean.java (useBean的定义) //DemoBean.java Public class DemoBean { int times; public void setTimes(int times) { this.times = times; } public int getTimes() { return this.times; } public int service() { return times * times ; } } 这个Bean提供的服务就是通过service方法计算Times的平方 • <jsp:useBean>标签用来将JavaBean与JSP连接在一起,保证对象在标签指定的范围内可以使用 • 在定义JavaBean时要指定其id,以后通过id对该JavaBean的对象实例进行引用 • 语法结构 <jsp:useBean id="id" scope="page | session | application" otherDetails / > • Id是一个大小写相关的名字,用来表示这个实例 • Scope表示该对象可以使用的范围 • 页面、一次会话、整个应用程序 • otherDetails可以是以下四者之一 • class="className" • class="className" type="typeName" • beanName="beanName" type="typeName" • type="typeName" class为完全限定的类名 type属性指定类的类型,类型必须是超类、实现的接口和类本身

  25. "testbean2.jsp"> "mynm" testbean2.jsp Property="name" param="mynm" /> testBean.java (setProperty的定义:一个测试的Bean) //testBean.java Public class TestBean { privte String name; //属性 private String password; //以下是Bean标准的getter 和setter方法 public void setName(string name) { this.name = name ; } public void setPassword(String password) { this.password = password ; } public String getName() { return this.name ; } public String getPassword() { return this.password ; } } <jsp:setProperty> setProperty的引用 testform1.html:提交请求网页 <html> <form method="get" action="testbean1.jsp"> <table> <tr>< td> <input name="name" type="text"> </td> <td> <input name="password" type="password"> </td> </tr><tr><td> <input type="submit" value="submit"> </td></tr></table> </html> testbean1.jsp:setProperty的引用 <% @page contextType="text/html; charset=gb2312" %> <jsp:useBean id="user" scope="page" class="TestBean"> <jsp:setProperty name="user" property="*" / > <html> <body> <% =user.getName( )%> <% =user.getPassword( ) %> </body> </html> • 此操作和useBean一起协作,用来设置Bean的简单属性和索引属性 • Bean的自省(interospection)用来发现出现的是哪些属性和他们的名字是什么,这些属性是简单的还是索引的,它们是什么类型的等 • setProperty的使用方法 <jsp:setProperty name="beanName" propertyDetails /> • 其中propertyDetails可以是以下几个中的一个 • property = "*" • property="propertyName" param="parameterName" • property="propertyName" • property="propertyName" value="propertyValue" • 其中parameterName是JSP里得到请求的参数,propertyValue是一个字符串或一个脚本。parameterName和propertyValue不能同时在一个标签里使用

  26. <jsp:getProperty> • jsp:getProperty操作是对jsp:setProperty的补充,用来访问一个Bean的属性,它访问的属性值将被转换为一个string,然后发送到输出流中。如果是个对象,将调用toString( )方法 • jsp:getProperty的使用方法 <jsp:getProperty name="beanName" property="propertyName" /> • Property是要索引的属性名,name为Bean实例的名字,这个Bean必须通过<jsp:useBean>创建 getProperty.jsp (getProperty的使用) <%@page contentType="text/html; charset=gb2312" %> <jsp:useBean id="user" scope="page" class="TestBean"> <jsp:setProperty name="user" property="name" value="he"/ > <jsp:setProperty name="user" property="password" value="he_pwd"> <html> <body> <h1><br> getPropert 演示 name:<jsp:getProperty name="user" property="name" /> password:<jsp:getProperty name="user" property="password" /> </body> </html>

  27. <jsp:param> • jsp:param操作被用来以“名-值”对的形式为其他标签提供附加信息,它和jsp:include、 jsp:forward以及jsp:plugin一起使用 • jsp:param使用格式 <jsp:param name="paraName" value="paramValue" /> • 其中name为属性相关联的关键字,value为属性的值 • 使用示例结合下面的jsp:include、jsp:forward以及jsp:plugin一起使用

  28. <jsp:include> • jsp:include操作允许在请求时间内在现成的JSP页面里包含静态的或动态的资源 • 被包含的对象只有对JspWrite对象访问权,且不能设置头或cookie • 如果页面输出是缓冲的,那么缓冲区的刷新要优先于包含的刷新 • 此命令在效率上比<%@page include %>指令的效率低,单可以动态增加内容 • 指令格式 • <jsp:include page="fileName" flush="true" /> 或者 • <jsp:include page="fileName" flush="true"> <jsp:param name="paraName" value="paramValue" /> ..... • </jsp:include>

  29. <jsp:forward> • jsp:forward操作允许将请求转发到另外一个JSP、Servlet或者静态资源文件,请求被转向到的资源必须位于同JSP发送请求相同的上下文环境 • 当遇到此操作时,就停止执行当前的JSP,转而执行被转发的资源 • jsp:forward使用方式 • <jsp:forward page="uri" /> 或者 • <jsp:forward page="uri"> <jsp:param name="paramName" value="paramValue" /> ...... • </jsp:forward>

  30. <jsp:plugin> • jsp:plugin用来产生客户端浏览器的特别标签,可以用来插入Applet或者JavaBean • 使用方法 • <jsp:plugin type="beanapplet" code="className" codebase="uri" align="alignment" archive="archiveList" height="height" width="width"> <jsp:param name="paramName" value="paramValue" /> ... </jsp:param> <jsp:fallback> some fallback</jsp:fallback> • </jsp:plugin>

  31. 9.2.5 JSP内建对象 • JSP为简化页面的制作提供了一些内部对象,这些对象不需要由JSP的使用者实例化或者声明就可以使用了 • 所有的隐含对象只有对Scriptlets或者表达式有用,在JSP声明中不可用 • JSP的内部对象 • Request对象 • Response对象 • PageContext对象 • Session对象 • Application对象 • Out对象 • Config对象 • Page对象 • Exception对象

  32. Request对象 • Request对象有它的请求访问,它被封装成HtpServletRequest接口,来自客户端的请求竟JSP处理后,由Request对象进行封装 • 它被作为jspService()方法的一个参数而由容器传递给JSP页面 • 通过getParameter(String parameterName)方法可以得到Request参数 • 通过GET、POST、HEAD等可以得到Request的类型 • 通过Cookie、Referer等可以得到引入的Http头 • 常用方法 • request.getParameter(string name) • request.getParameterName() • request.setCharacterEncoding(string encoding)

  33. Response对象 • Response对象具有页面的范围,被包装成HttpServletResponse接口 • 它封装了JSP产生的响应,然后发送到客户端以响应客户的请求 • 它由容器产生,作为jspService() 方法的参数被传入JSP • 因为输出流是缓冲的,所以可以设置HTTP状态码和Response头 • 常用操作 • response.sendRedirect("newURL") • response.setHeader("HeadInfo")

  34. Session对象 • Session对象用来保存每个用户的信息,以便跟踪每个用户的操作状态 • Session信息保存在容器中,Session的id保存在客户机的cookie中 • 一般情况下,用户首次登陆系统时容器会给此用户分配一个唯一标识的session id,这个id用于区分其他用户,当用户退出系统时,这个session就会消失 • 和session对应的是HttpSession借口 • 常用方法 • getAttribute(String sttrName) • setAttribute(String attrName) • getId ()

  35. Application对象 • Application对象为多个应用程序保存信息 • 对于一个容器,每个用户共同使用一个Application对象 • 服务器启动后,就会自动产生Application对象,这个对象一直保持,直到服务器关闭为止 • Application对象为不同的用户共享某些信息提供了方便 • 常用方法 • getAttribute(string sttrName) • getAttributeName() • getInitParameter(string name) • getServletInfo() • setAttribute(string attrName)

  36. PageContext对象 • PageContext对象被封装成javax.servlet.pageContext接口,它为JSP页面包装上下文,管理对属于JSP中特殊可见部分中已命名对象的访问 • 它的创建和初始化都是由容器完成的,JSP网页里可以直接使用PageContext对象 • Pagecontext对象的getXXX()、setXXX()和findXXX()方法可以用来根据不同的对象范围实现对这些对象的管理 • 常用方法 • getServletContext( ) • getAttribute( ) • setAttribute( ) • getSession( )

  37. Out对象 • Out对象被封装成javax.servlet.jsp.JspWriter接口 • 它表示为客户打开的输出流,PrintWriter使用它向客户端发送输出流,即它主要用来向客户端输出数据 • 常用方法 • Out.println(Boolean/char/char[]/double/float/long/object/String) • Out.print(Boolean/char/char[]/double/float/long/object/String) • Out.newLine( ) • Out.flush( ) • Out.close( )

  38. Config与Page对象 • Config对象被封装成javax.servlet.ServletConfig接口 • 它表示Servlet的一个配置 • 当一个Servlet初始化时,容器把某些信息通过此对象传递给这个Servlet • 常用方法 • getServletContext( ) • getServletName( ) • getInitParament( ) • Page对象 • Page对象是java.lang.object类的一个实例,它指的是JSP实现类的实例,即它是JSP本身,通过this可以对它进行访问

  39. Exception对象 • Exception对象是java.lang.Throwable类的一个实例 • 它指的是运行时的异常,即被调用的错误页面的结果,只有它的错误页面(在页面指令里有isErrorPage=true)才可以使用 • 在JSP里捕获异常大多数是使用JSP标准机制,然后通过方法request.setAttribute(String errorName)把它作为一个属性放在request对象中,最终把这个请求转发给错误处理的JSP页面,处理错误的页面利用request.getattribute(String errorName)得到错误信息的具体内容

  40. 内建对象的综合应用 (1) • 首先进入一个表单网页,对application和session对象进行属性设置,文件名为innerobject.jsp <% @page contentType="text/html; charset=gb2312" %> <html><body> <form method="get" action="innerobject2.jsp"> <table> <tr> <br> <input type="text" name="username"> </td> <tr> <td> <input type="submit" value="提交"> </td> </tr> </table> </form> <% session.setAttribute("sessionAttr", "sessionAttribute: 输入中文" ) ; application.setAttribute("pageContextAttr", "pageContextAttribute") ; %> </body></html>

  41. 说明: • 不同的对象采用不同的方法获得请求的参数和系统的参数 • 只有在同一个页面中设置的page Context属性才可以使用 • PageContext可以通过getSession()方法获得session对象 • 利用request.setCharacterEncoding()语句可以把请求的数据用指定的编码显示 内建对象的综合应用 (2) • 表单处理程序innerObject2.jsp <%@ page content Type="text/html; charset=gb2312" errorPage="error.jsp" %> <%pageContrxt.setAttribute("pageContextAttr","pageContextAttribute2"); %> <html><body><center> <br><hr> request <br> <% request.setCharacterEncoding("gb2312"); 设置请求的编码 out.println("ServerName="+(String)request.getServerName()+"<br>"); out.println("ServletPath="+(string)request.getServletPath( )+"<br>"); out.println("得到请求的数据, username="+(String)request.getParameter("username")+"<br>"); %> <br><hr> session <br> <% out.println("得到session的属性, sessionAttr="+(String)session.getAttribute("sessionAttr")+"<br>"); %> <br><hr> application <br> <% out.println("得到application的属性, sessionAttr="+(String)session.getAttribute("sessionAttr")+"<br>"); out.println("得到application初始参数,initlogincount="+(String)application.getInitParameter("initlogincount")+"<br>"); %> <br><hr> pageContext <br> <% out.println("pageContext可以得到session的属性, sessionAttr="+ (String)pageContext.getSession().getAttribute ("sessionAttr") + "<br>"); out.println("得到pageContext的属性" + (String)pageContext.getAttribute("pageContextAttr")+"<br>"); %> <br>测试一下出错,看看错误在哪里处理。<a href="innerobject3.jsp">出错</a> </center> </body></html>

  42. Error.jsp的设计方案 <% @ page contentType = "text/html; charset=gb2312" %> <% @ page isErrorPage = "true" %> 出错了!<br>错误信息:<br> <% = "Rxception" + exception %> <br><br> <% = "Message"+exception.getMessage() %> <% exception.printStackTrace(); %>

  43. 关于复习练习 • 在全面通读教材的基础上练习各项练习题 • 练习时先按实战要求自己完成,做完后再看答案 • 看答案时不要只是背答案,而要认真分析答案给出的解题思路,并能举一反三,真正弄懂弄通,达到融会贯通的效果 • 在反复练习的基础上,逐步练习完整的试卷 • 试卷练习同样要以实战为基点,按时按量进行联系,时间到了立即停止,然后按照答案进行评分 • 对做错的题进行认真分析,找到错误的原因。同样不是背答案,掌握解题思路,及时总结每套试卷练习中的得失。 • 模拟试卷是综合练习,也是按照考试的要求命题的,因此练习时也要按照考试的要求进行,以便调整做题心态,养成良好的临场状态

More Related