资源预览内容
第1页 / 共80页
第2页 / 共80页
第3页 / 共80页
第4页 / 共80页
第5页 / 共80页
第6页 / 共80页
第7页 / 共80页
第8页 / 共80页
第9页 / 共80页
第10页 / 共80页
亲,该文档总共80页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
动态网页设计(JSP),第8章 JSP高级开发技术,课程描述 经过前面的章节,我们已基本掌握了使用JSP开发Web应用程序的方法,本章讲述JSP的高级开发技术,为避免冲淡前面的JSP基础,这里只做简单介绍,不具体展开。,第8章 JSP高级开发技术,知识点及技能点 自定义标签库与标准标签库(JSTL) 表达式语言 MVC模型与Struts框架简介,第8章 JSP高级开发技术,主要内容 8.1 自定义标签库与标准标签库(JSTL) 8.2 表达式语言 8.3 JSTL和表达式语言综合实例 8.4 MVC模型与Struts框架简介,第8章 JSP高级开发技术,通过使用标签库,特别是标准标签库,可以大大降低JSP页面复杂度,并且使代码最大程度地重用。从JSP 2.0起,标准标签库(JSTL)作为标准的支持。JSTL定义了JSP开发中重用程度最大的标签。下面将有选择的介绍有关标签库地开发。,8.1 自定义标签库与标准标签库(JSTL),8.1.1 标签语言与自定义标签,标签扩展是一个Java类,它是运行一个或者两个接口的JavaBean。在JSP规范里,标签具有比JavaBean更丰富的运行时协议,具体原因如下: 初始化可以包含属性,如果没有这些属性,标签就不能运行,而JavaBean的构造函数参数为空。 设置和获取属性不会涉及到所有的基类,在Bean中只有很少量的逻辑控制。 JSP页面中的Bean没有设置默认上下文,也就是说,Bean没有一个父类的或者页面上下文对象的默认概念。,8.1 自定义标签库与标准标签库(JSTL),8.1.1 标签语言与自定义标签,JSP所有的标签都实现了javax.servlet.jsp.tagext.JspTag接口,这个接口是一个标记接口,它有两个直接子接口: 一个是simpleTag,它是JSP 2.0新增加的接口,代表简单的标签。 一个是Tag接口,它是经典的、必须实现的接口,它有一个直接子接口就是IterationTag。,8.1 自定义标签库与标准标签库(JSTL),8.1.1 标签语言与自定义标签,由于JSP 2.0中新定义的标签在实现原理上和JSP 1.2中的标签有很大的区别。在这里,我们称JSP 1.2规范中的标签为传统标签,JSP 2.0新定义的一种类型的标签为简单标签(simpleTag)。需要注意的是,JSP 2.0中既有传统的标签,也有简单标签。,8.1 自定义标签库与标准标签库(JSTL),8.1.1 标签语言与自定义标签,IterationTag用于开发迭代的标签,它有一个简单的实现类为TagSupport,在开发时,只要从TagSupport扩展就可以开发出迭代标签了。 IterationTag还有一个子接口,就是BodyTag,这种标签允许带有Body,BodyTag也有一个实现类,就是BodyTagSupport,在开发BodyTag时往往直接从它继承就可以了。,8.1 自定义标签库与标准标签库(JSTL),自定义标签,自定义标签由标记处理程序和标签的描述组成。当遇到特定标记时,标记处理程序就会告诉系统应该做什么。类中包含了请求期问将要执行的Java代码。标签的描述声明了怎么使用这个标签。标记可以带有属性和主体,这些属性和主体是可选的,最简单的标记可以没有属性和主体。,8.1 自定义标签库与标准标签库(JSTL),8.1.1 标签语言与自定义标签,自定义标签,以下是几种典型的标签。 不带属性和主体的简单标签: 。 不带主体但有属性的标签: 。 带有主体和属性的标签: 这里是标签体,可以是任何合法的JSP内容或者标签。 SimpleTag:这是JSP 2.0新增加的一种类型的标签。 另外,一个标签可以嵌套在另一个标签里面,这就使得标签可以有很强的页面内容管理能力。,8.1 自定义标签库与标准标签库(JSTL),8.1.1 标签语言与自定义标签,8.1.2 JSTL简介,从JSP 1.1规范开始,JSP就支持在JSP中使用自定义标签了。自定义标签的广泛使用造成了程序员重复定义,这样就促成了JSTL(JavaServer Pages Standard Tag Library)的诞生。 JSTL的优点: 1、 在应用程序服务器之间提供了一致的接口,最大程序地提高了Web应用在各应用服务器之间的移植。 2、 简化了JSP和WEB应用程序的开发。 3、 以一种统一的方式减少了JSP中的Scriptlet代码数量,可以达到没有任何scriptlet代码的程序。在我们公司的项目中不允许有任何scriptlet代码出现在JSP中。 4、 允许JSP设计工具与Web应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE开发工具出现。,8.1 自定义标签库与标准标签库(JSTL),8.1.2 JSTL简介,JSTL目前的最新版本为1.2,最终发布版为1.0。JSTL包含两个部分:标签库和EL(Expression Language,表达式语言)。标签库目前支持四种标签: Core支持JSP中的一些基本的操作; XML processing支持XML文档的处理; I18N capable formatting支持对JSP页面的国际化(尤其是数字和日期); Database access (SQL)支持JSP对数据库的操作。,8.1 自定义标签库与标准标签库(JSTL),8.1.3 一般用途的标签,1.标签用于在JSP中显示数据 例如: 您的用户名是: 显示用户的用户名,如为空则显示guest。 指定从session中获取username的值并显示。 显示username的值. 默认是从request(page)中获取。如果request中没有名为username的对象则从session中获取,如果session中没有则从application(servletContext)中获取,如果没有取到任何值则不显示 。,8.1 自定义标签库与标准标签库(JSTL),8.1.3 一般用途的标签,2.标签用于保存数据 如果指定了target属性, 那么property属性也必须指定。 例子: 将test.testinfo的值保存到session的test2中,其中test是JavaBean的一个实例,testinfo是test对象的属性。 将对象cust.address的city属性值保存到变量city中 3.标签用于删除数据 例如: 从session中删除test2变量。,8.1 自定义标签库与标准标签库(JSTL),8.1.4 条件标签,1. 这个标签不接受任何属性 这个标签同样不接受任何属性 例如: user.wealthy is true. 2. 如果user.wealthy值true,则显示user.wealthy is true. user.generous is true. ,8.1 自定义标签库与标准标签库(JSTL),8.1.4 条件标签, user.stingy is true. 3. 4. user.generous and user.stingy are false. 只有当条件user.generous返回值是true时,才显示user.generous is true. 只有当条件user.stingy返回值是true时,才显示user.stingy is true. 其他所有的情况(即user.generous和user.stingy的值都不为true)全部显示user.generous and user.stingy are false. 由于JSTL没有形如if () else 的条件语句,所以这种形式的语句只能用、和标签共同来完成了。,8.1 自定义标签库与标准标签库(JSTL),8.1.5 迭代标签,标签用于通用数据 例如: 相当于Java语句 for (int i=0;i count= 输出: count=0 . count=100,8.1 自定义标签库与标准标签库(JSTL),8.1.5 迭代标签, 例如: 这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以“:”分开循环4次,token是循环当前分割到的字符串。,8.1 自定义标签库与标准标签库(JSTL),8.1.6 URL标签,JSTL核心标签库支持使用来包含文件,使用来输出和格式化URL,使用来重定向URL。 标签包含另外一个页面代码到当前页 标签输出一个URL地址,8.1 自定义标签库与标准标签库(JSTL),8.1.6 URL标签,例如: 将url http:/www.url.com/edit.js包含到当前页的当前位置,并将url保存到newsfeed变量中 “/ 在当前页的当前位置输出 ,http:/www.yourname.com是当前页的所在的位置。 比强大得多,但是,也有其它理由去使用的。在JSTL中,对于引入的资源使用了缓存,但有时候缓存会是没用的。如果你使用,资源的内容会被读入并写到当前的JspWriter,而且是每访问一次就重读一次。而使用,资源的内容则只会读取一次。,8.1 自定义标签库与标准标签库(JSTL),8.1.6 URL标签,3. 标签将请求重新定向到另外一个页面 例如: 将请求重新定向到http:/www.yourname.com/login.jsp页,相当于response.setRedirect(“http:/www.yourname.com/login.jsp“); 4. 标签用来传递参数给一个重定向或包含页面 例如: 将参数888以“id”为名字传递到login.jsp页面,相当于login.jsp?id=888,8.1 自定义标签库与标准标签库(JSTL),8.1.7 XML标签,XML操作也可细分成核心操作,流程控制操作和转换操作。JSTL中的XML操作是基于Xpath的,Xpath是XML操作专用的表达式语言。JSTL所有的XML操作中,用select属性去指定XPath表达式,这些信息将由XPath引擎解释。 XML核心操作与JSTL的核心操作相似,它包含、和标记。标记提供将XML文档转换成结构化数据的功能,之后,这些数据就能被XPath引擎解释了。 例如,有一个关于书籍的XML文档,我们就可以解释它并打印出来: ,8.1 自定义标签库与标准标签库(JSTL),8.1.8 国际化输出标签,JSTL的另一项重要功能就是本地化操作,通过当前请求的,或者环境配置中的参数,就可以简便地实现本地化操作。这个操作是使用J2SE中的ResourceBundle机制去存放各种译文。JSTL通过设定的区域,去找到并使用相应的ResourceBundle。 用去设置区域,如,value属性为语言代码和国家代码。 也可以直接指定一个ResourceBundle: 。 一旦设置了区域或者绑定特定的信息,那么标记就会自动地选择正确的ResourceBundle,使用以下形式就可以输出正确的信息: ,8.1 自定义标签库与标准标签库(JSTL),8.1.8 国际化输出标签,你也可以直接使用标记去设置当前请求的字符集。 获取和显示文字信息只是本地化操作的一部分内容,而另一 部分就是格式化同解释日期和数字,不同的地域会有不同的日期和数字格式。使用和去格式化数字、金额,百分比数,而且还可以指定格式,就如 会输出“12.30“。 日期和时间的处理使用、和。,8.1 自定义标签库与标准标签库(JSTL),8.1.9 SQL标签,下面我们来看一下SQL操作。 SQL标记可以用来设置数据源,执行查询,访问查询结果,执行更新等。所有的SQL操作都是基于某一数据源的。 有几种方式可以设置数据源:在配置文件里设置sql.datasource参数,在程序中直接设置,或者使用标记。 如下面就设置了一个MySQL的数据源: ,8.1 自定义标签库与标准标签库(JSTL),8.1.9 SQL标
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号