当前位置:文档之家› JSTL教程

JSTL教程

JSTL教程
JSTL教程

JSTL 入门:表达式语言

JSP 标准标记库(JSP Standard Tag Library,JSTL)是一个实现Web 应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。在developerWorks 上其新系列的第一篇文章中,软件工程师Mark Kolb 向您展示了如何使用JSTL 标记来避免在JSP 页面中使用脚本编制元素。您还将了解如何通过从表示层删除源代码来简化软件维护。最后,您将了解JSTL 经过简化的表达式语言,它允许在不必使用功能齐全的编程语言的情况下对JSTL 操作指定动态属性值。

JavaServer Pages(JSP)是用于J2EE 平台的标准表示层技术。JSP 技术提供了用于执行计算(这些计算用来动态地生成页面内容)的脚本编制元素和操作。脚本编制元素允许在JSP 页面中包括程序源代码,在为响应用户请求而呈现页面时可以执行这些源代码。操作将计算操作封装到很象HTML 或XML 标记的标记中,JSP 页面的模板文本通常包含这些标记。JSP 规范只将几种操作定义成了标准,但从JSP 1.1 开始,开发人员已经能够以定制标记库的方式创建其自己的操作了。

JSP 标准标记库(JSTL)是JSP 1.2 定制标记库集,这些标记库实现大量服务器端Java 应用程序常用的基本功能。通过为典型表示层任务(如数据格式化和迭代或条件内容)提供标准实现,JSTL 使JSP 作者可以专注于特定于应用程序的开发需求,而不是为这些通用操作“另起炉灶”。

当然,您可以使用JSP 脚本编制元素(scriptlet、表达式和声明)来实现此类任务。例如,可以使用三个scriptlet 实现条件内容,清单 1 中着重显示了这三个scriptlet。但是,因为脚本编制元素依赖于在页面中嵌入程序源代码(通常是Java 代码),所以对于使用这些脚本编制元素的JSP 页面,其软件维护任务的复杂度大大增加了。例如,清单 1 中的scriptlet 示例严格地依赖于花括号的正确匹配。如果不经意间引入了一个语法错误,则条件内容中的嵌套其它scriptlet 可能会造成严重破坏,并且在JSP 容器编译该页面时,要使所产生的错误信息有意义可能会很困难。

清单 1. 通过scriptlet 实现条件内容

修正此类问题通常需要相当丰富的编程经验。尽管通常会由十分精通页面布局和图形设计的设计人员来开发和维护JSP,但是同一页面中的脚本编制元素出现问题时,需要程序员的介入。这种状况将单个文件中代码的责任分担给多人,因而使得开发、调试和增强此类JSP 页面成为很麻烦的任务。

通过将常用功能包装到定制标记库的标准集合中,JSTL 使JSP 作者可以减少对编制脚本元素的需求,甚至可以不需要它们,并避免了相关的维护成本。

JSTL 1.0

JSTL 1.0 发布于2002 年6 月,由四个定制标记库(core、format、xml和sql)和一对通用标记库验证器(ScriptFreeTLV和PermittedTaglibsTLV)组成。core标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作URL 的标记。顾名思义,format标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行JSP 页面的国际化。xml库包含一些标记,这些标记用来操作通过XML 表示的数据,而sql库定义了用来查询关系数据库的操作。

两个JSTL 标记库验证器允许开发人员在其JSP 应用程序中强制使用编码标准。可以配置ScriptFreeTLV验证器以在JSP 页面中禁用各种类型的JSP 脚本元素— scriptlet、表达式和声明。类似地,PermittedTaglibsTLV验证器可以用来限制可能由应用程序的JSP 页面访问的定制标记库集(包括JSTL 标记库)。

尽管JSTL 最终将会成为J2EE 平台的必需组件,但目前只有少数应用程序服务器包括它。JSTL 1.0 的参考实现可作为Apache 软件基金会(Apache Software Foundation)的Jakarta Taglibs 项目(请参阅参考资料)的一部分而获得。可以将该参考实现中的定制标记库合并到任何支持JSP 1.2 和Servlet 2.3 规范的服务器,以添加对JSTL 的支持。

表达式语言

在JSP 1.2 中,可以使用静态字符串或表达式(如果允许的话)指定JSP 操作的属性。例如,在清单 2 中,对操作的name和property属性指定了静态值,而用表达式指定了其value属性。这个操作的效果是将请求参数的当前值赋予命名的bean 特性。以这种形式使用的表达式被称为请求时属性值(request-time attribute value),这是构建到JSP 规范中的用于动态指定属性值的唯一机制。

清单 2. 合并请求时属性值的JSP 操作

因为请求时属性值是用表达式指定的,所以它们往往有和其它脚本元素一样的软件维护问题。因此,JSTL 定制标记支持另一种用于指定动态属性值的机制。可以用简化的表达式语言(EL)而不使用完整的JSP 表达式来指定JSTL 操作的属性值。EL 提供了一些标识符、存取器和运算符,用来检索和操作驻留在JSP 容器中的数据。EL 在某种程度上以EcmaScript(请参阅参考资料)和XML 路径语言(XML Path Language,XPath)为基础,因此页面设计人员和程序员都应该熟悉它的语法。EL 擅长寻找对象及其特性,然后对它们执行简单操作;它不是编程语言,甚至不是脚本编制语言。但是,与JSTL 标记一起使用时,它就能使用简单而又方便的符号来表示复杂的行为。EL 表达式的格式是这样的:用美元符号($)定界,内容包括在花括号({})中,如清单 3 所示。

清单 3. 说明EL 表达式定界符的JSTL 操作

此外,您可以将多个表达式与静态文本组合在一起以通过字符串并置来构造动态属性值,如清单 4 所示。单独的表达式由标识符、存取器、文字和运算符组成。标识符用来引用存储在数据中心中的数据对象。EL 有11 个保留标识符,对应于11 个EL 隐式对象。假定所有其它标识符都引用限制了作用域的变量。存取器用来检索对象的特性或集合的元素。文字表示固定的值—数字、字符、字符串、布尔型或空值。运算符允许对数据和文字进行组合以及比较。

清单 4. 组合静态文本和多个EL 表达式以指定动态属性值

限制了作用域的变量

JSP API 通过操作允许从JSP 容器内的四个不同作用域中存储和检索数据。JSTL 通过提供用于指定和除去这些作用域中的对象的附加操作来扩展这一能力。此外,EL 提供将这些对象作为限制了作用域的变量进行检索的内置支持。特别地,任何出现在EL 表达式中但不对应于任何EL 隐式对象的标识符,都被自动假定为引用存储在四个JSP 作用域的其中某个中的对象,这四个作用域是:

?页面作用域

?请求作用域

?会话作用域

应用程序作用域

您可能还记得,只有在为特定请求处理页面期间才能检索存储在该页面作用域中的对象。如果对象是存储在请求作用域中的,可以在处理所有参与处理某请求的页面期间检索这些对象(譬如在对某个请求的处理中遇到了一个或多个操作)。如果对象是存储在会话作用域中的,则在与Web 应用程序的交互式会话期间,可以由用户访问的任何页面检索它(即,直到与该用户交互相关联的HttpSession对象无效为止)。可以由任何用户从任何页面访问存储在应用程序作用域中的对象,直到卸载Web 应用程序本身为止(通常是由于关闭JSP 容器所致)。

通过将字符串映射为期望作用域中的对象来将对象存储到该作用域。然后,就可以通过提供相同字符串来从该作用域检索该对象。在作用域的映射中查找字符串,并返回被映射的对象。在Servlet API 中,将此类对象称为相应作用域的属性。但是,在EL 的上下文中,也将与属性相关联的字符串看作变量的名称,该变量通过属性映射的方式获得特定的值。

在EL 中,与隐式对象无关联的标识符被认为是存储在四个JSP 作用域中的名称对象。首先对页面作用域检查是否存在这样的标识符,其次对请求作用域、然后对会话作用域、最后对应用程序作用域依次进行这样的检查,然后测试该标识符的名称是否与存储在该作用域中的某个对象的名称匹配。第一个这样的匹配作为EL 标识符的值被返回。通过这种方法,可以将EL 标识符看作引用限制了作用域的变量。

从更技术的方面来说,没有映射到隐式对象的标识符是用PageContext实例的

findAttribute()方法求值的,该实例表示对页面的处理,在该页面上,当前正在处理用于请求的表达式。标识符的名称作为参数传递给这个方法,然后该方法依次在四个作用域中搜索具有相同名称的属性。并将所找到的第一个匹配项作为findAttribute()方法的值返回。如果未在这四个作用域中找到这样的属性,则返回null。

最终,限制了作用域的变量是四个JSP 作用域的属性,这些属性具有可以用作EL 标识符的名称。只要对限制了作用域的变量赋予由字母数字组成的名称,就可以通过JSP 中提供的用于设置属性的任何机制来创建它们。这包括内置的操作,以及由Servlet API 中的几个类定义的setAttribute()方法。此外,四个JSTL 库中定义的许多定制标记本身就能够设置作为限制了作用域的变量使用的属性值。

隐式对象

表 1 中列出了11 个EL 隐式对象的标识符。不要将这些对象与JSP 隐式对象(一共只有九个)混淆,其中只有一个对象是它们所共有的。

表 1. EL 隐式对象

尽管JSP 和EL 隐式对象中只有一个公共对象(pageContext),但通过EL 也可以访问其它JSP 隐式对象。原因是pageContext拥有访问所有其它八个JSP 隐式对象的特性。实际上,这是将它包括在EL 隐式对象中的主要理由。

其余所有EL 隐式对象都是映射,可以用来查找对应于名称的对象。前四个映射表示先前讨论的各种属性作用域。可以用它们来查找特定作用域中的标识符,而不用依赖于EL 在缺省情况下使用的顺序查找过程。

接下来的四个映射用来获取请求参数和请求头的值。因为HTTP 协议允许请求参数和请求头具有多个值,所以它们各有一对映射。每对中的第一个映射返回请求参数或头的主要值,通常是恰巧在实际请求中首先指定的那个值。每对中第二个映射允许检索参数或头的所有值。这些映射中的键是参数或头的名称,但这些值是String对象的数组,其中的每个元素都是单一参数值或头值。

cookie 隐式对象提供了对由请求设置的cookie 名称的访问。这个对象将所有与请求相关联的cookie 名称映射到表示那些cookie 特性的Cookie对象。

最后一个EL 隐式对象initParam是一个映射,它储存与Web 应用程序相关联的所有上下文的初始化参数的名称和值。初始化参数是通过web.xml部署描述符文件指定的,该文件位于应用程序的WEB-INF目录中。

存取器

因为EL 标识符是作为隐式对象或限制了作用域的变量(通过属性来实现)解析的,因此有必要将它们转换成Java 对象。EL 可以自动包装和解包其相应的Java 类中的基本类型(例如,可以在后台将int强制转换成Integer类,反之亦可),但大多数的标识符将成为指向完整的Java 对象的指针。

结果是,对这些对象的特性或(在对象是数组和集合的情况下)对其元素的访问通常是令人满意的。就为了实现这种用途,EL 提供了两种不同的存取器(点运算符(.)和方括号运算符([])),也支持通过EL 操作特性和元素。

点运算符通常用于访问对象的特性。例如,在表达式${user.firstName}中,使用点运算符来访问user标识符所引用对象的名为firstName的特性。EL 使用Java bean 约定访问对象特性,因此必须定义这个特性的getter 方法(通常是名为getFirstName()的方法),以便表达式正确求值。当被访问的特性本身是对象时,可以递归地应用点运算符。例如,如果我们虚构的user 对象有一个实现为Java 对象的address特性,那么也可以用点运算符来访问这个对象的特性。例如,表达式${user.address.city}将会返回这个地址对象嵌套的city特性。

方括号运算符用来检索数组和集合的元素。在数组和有序集合(也即,实现了java.util.List接口的集合)的情况下,把要检索的元素的下标放在方括号中。例如,表达式${urls[3]}返回urls 标识符所引用的数组或集合的第四个元素(和Java 语言以及JavaScript 中一样,EL 中的下标是从零开始的)。

对于实现java.util.Map接口的集合,方括号运算符使用关联的键查找存储在映射中的值。在方括号中指定键,并将相应的值作为表达式的值返回。例如,表达式${commands["dir"]}返回与commands标识符所引用的Map中的"dir"键相关联的值。

对于上述两种情况,都可允许表达式出现在方括号中。对嵌套表达式求值的结果将被作为下标或键,用来检索集合或数组的适当元素。和点运算符一样,方括号运算符也可以递归应用。这使得EL 能够从多维数组、嵌套集合或两者的任意组合中检索元素。此外,点运算符和方括号运算符还可以互操作。例如,如果数组的元素本身是对象,则可以使用方括号运算符来检索该数组的元素,并结合点运算符来检索该元素的一个特性(例如${urls[3].protocol})。

假定EL 充当指定动态属性值的简化语言,EL 存取器有一个有趣的功能(与Java 语言的存取器不同),那就是它们在应用于null时不抛出异常。如果应用EL 存取器的对象(例如,${foo.bar}和${foo["bar"]}中的foo标识符)是null,那么应用存取器的结果也是null。事实证明,在大多数情况下,这是一个相当有用的行为,不久您就会了解这一点。

最后,点运算符和方括号运算符可能实现某种程度的互换。例如,也可以使用

${user["firstName"]}来检索user对象的firstName特性,正如可以用${commands.dir}获取与commands映射中的"dir"键相关联的值一样。

运算符

EL 还可以通过使用标识符和存取器,遍历包含应用程序数据(通过限制了作用域的变量公开)或关于环境的信息(通过EL 隐式对象)的对象层次结构。但是,只是访问这些数据,通常不足以实现许多JSP 应用程序所需的表示逻辑。

最终,EL 还包括了几个用来操作和比较EL 表达式所访问数据的运算符。表 2 中汇总了这些运算符。

表 2. EL 运算符

算术运算符支持数值的加法、减法、乘法和除法。还提供了一个求余运算符。注:除法和求余运算符都有替代的、非符号的名称(为的是与XPath 保持一致)。清单 5 中显示了一个演示算术运算符用法的示例表达式。对几个EL 表达式应用算术运算符的结果是将该算术运算符应用于这些表达式返回的数值所得的结果。

清单 5. 利用算术运算符的EL 表达式

关系运算符允许比较数字或文本数据。比较的结果作为布尔值返回。逻辑运算符允许合并布尔值,返回新的布尔值。因此,可以将EL 逻辑运算符应用于嵌套的关系或逻辑运算符的结果,如清单 6 所示。

清单 6. 利用关系和逻辑运算符的EL 表达式

最后一种EL 运算符是empty,它对于验证数据特别有用。empty运算符采用单个表达式作为其变量(也即,${empty input}),并返回一个布尔值,该布尔值表示对表达式求值的结果是不是“空”值。求值结果为null的表达式被认为是空,即无元素的集合或数组。如果参数是对长度为零的String求值所得的结果,则empty运算符也将返回true。

表 3 显示了EL 运算符的优先级。正如清单 5 和 6 所示,可以用圆括号对表达式分组,高于普通的优先级规则。

表 3. EL 运算符优先级(自顶到底,从左到右)

文字

在EL 表达式中,数字、字符串、布尔值和null都可以被指定为文字值。字符串可以用单引号或双引号定界。布尔值被指定为true和false。

Taglib 伪指令

正如我们先前讨论的,JSTL 1.0 包括四个定制标记库。为了演示JSTL 标记和表达式语言的交互,我们将研究几个来自JSTL core库的标记。和使用任何JSP 定制标记库一样,必须在您想要使用这个库标记的任何页面中包括taglib伪指令。清单7 显示了用于这个特定库的伪指令。

清单7. 用于JSTL core 库EL 版本的taglib 伪指令

实际上,对应于JSTL core库的taglib伪指令有两种,因为在JSTL 1.0 中,EL 是可选的。所有四个JSTL 1.0 定制标记库都有使用JSP 表达式(而不是EL)指定动态属性值的备用版本。因为这些备用库依赖于JSP 的更传统的请求时属性值,所以它们被称为RT库,而那些使用表达式语言的则被称为EL库。开发人员用不同的taglib伪指令来区分每个库的这两个版本。清单8 显示了使用core 库的RT 版本的伪指令。但是,由于现在我们讨论的重点是EL,所以首先需要这些伪指令。

清单8. 用于JSTL core 库RT 版本的taglib 伪指令

变量标记

我们首先要考虑的JSTL 定制标记是操作。正如已经说明的,限制了作用域的变量在

JSTL 中起关键作用,操作提供基于标记的机制来创建和设置限制了作用域的变量。清单9 中显示了该操作的语法,其中var属性指定了限制了作用域的变量的名称,scope属性表明了该变量驻留在哪个作用域中,value属性指定了分配给该变量的值。如果指定变量已经存在,则简单地将所指明的值赋给它。如果不存在,则创建新的限制了作用域的变量,并用该值初始化这个变量。

清单9. 操作的语法

scope属性是可选的,其缺省值是page。

清单10 中显示了的两个示例。在第一个示例中,将会话作用域变量设置成String 值。在第二个示例中,用表达式来设置数值:将页面作用域内名为square的变量赋值为名为x的请求参数的值的平方。

清单10. 操作示例

您还可以将限制了作用域的变量的值指定为操作的主体内容,而不是使用属性。使用这种方法,您可以重新编写清单10 中的第一个示例,如清单11 所示。此外,正如我们马上可以看到的,标记的主体内容本身也可以使用定制标记。主体内生成的所有内容都将作为一个String值赋给指定变量。

清单11. 通过主体内容指定 操作的值

JSTL core 库包含第二个用于管理限制了作用域的变量的标记—。顾名思义,

操作是用来删除限制了作用域的变量的,它获取两个属性。var属性指定待删除变量的名称,scope属性是可选的,它表示待删除变量来自哪个作用域,缺省为page,如清单12 所示。

清单12. 操作示例

输出

尽管操作允许将表达式结果赋给限制了作用域的变量,但开发人员通常会希望只显示表达式的值,而不存储它。JSTL 定制标记承担这一任务,其语法如清单13 所示。该标记对由其value属性指定的表达式进行求值,然后打印结果。如果指定了可选属性default,那么,在对value属性的表达式求值所得结果为null或空String的情况下,将打印其值。

清单13. 操作的语法

escapeXml属性也是可选的。它控制当用标记输出诸如“<”、“>”和“&”之类的字符(在HTML 和XML 中具有特殊意义)时是否应该进行转义。如果将escapeXml设置为true,则会自动将这些字符转换成相应的XML 实体(此处提到的字符分别转换成<、>和&)。

例如,假定有一个名为user的会话作用域变量,它是一个类的实例,该类为用户定义了两个特性:username和company。每当用户访问站点时,这个对象被自动分配给会话,但直到用户实际登录后,才会设置这两个特性。假定是这种方案,请考虑清单14 中的JSP 片段。在用户登录之后,这个片段将显示单词“Hello”,其后是他/她的用户名和一个惊叹号。但是,在用户登录之前,由这个片段生成的内容则是短语“Hello Guest!”。在这种情况下,因为username特性还有待初始化,所以标记将转而打印出default属性的值(即字符串“Guest”)。

清单14. 带缺省内容的 操作示例

接下来,考虑清单15,它使用了标记的escapeXml属性。如果在这种情况下已经将company特性设置成Java String值"Flynn & Sons",那么,实际上该操作生成的内容将是Flynn & Sons。如果这个操作是生成HTML 或XML 内容的JSP 页面的一部分,那么,这个字符串中间的“&”符号最终可能被解释为HTML 或XML 控制字符,从而妨碍了对该内容的显示或

解析。但是,如果将escapeXml属性值设置成true,则所生成的内容将是Flynn & Sons。浏览器或解析器不会因在解释时遇到这种内容而出问题。假定HTML 和XML 是JSP 应用程序中最常见的内容类型,所以escapeXml属性的缺省值是true就不足为奇了。

清单15. 禁用转义的 操作示例

用缺省值设置变量

除了简化动态数据的显示之外,当通过设置变量值时,指定缺省值的能力也很有用。正如清单11所示,用来赋给限制了作用域的变量的值可以指定为标记的主体内容,也可以通过其值属性来指定。通过将操作嵌套在标记的主体内容中,变量赋值就可以利用其缺省值能力。

清单16 中说明了这种方法。外部标记的行为非常简单:它根据其主体内容设置会话作用域timezone变量的值。但是,在这种情况下,主体内容是通过操作生成的。这个嵌套操作的值属性是表达式${cookie['tzPref'].value},它尝试通过cookie隐式对象返回名为tzPref的cookie 值。(cookie隐式对象将cookie 名称映射到相应的Cookie实例,这意味着必须通过对象的value特性使用点运算符来检索储存在cookie 中的实际数据。)

清单16. 合并 以提供缺省变量值

但是,请考虑以下情况,用户是第一次尝试使用这段代码的Web 应用程序。结果是,请求中没有提供名为tzPref的cookie。这意味着使用隐式对象的查找将返回null,在这种情况下整个表达式将返回null。因为对标记的value属性求值的结果是null,所以标记会转而输出对其default属性求值的结果。在这里是字符串CST。因此,实际的结果是将timezone限制了作用域的变量设置成用户的tzPref cookie 中存储的时区,或者,如果没有,则使用缺省时区CST。

结束语

EL(与四个JSTL 定制标记库提供的操作结合起来)允许页面作者不使用脚本元素即可实现表示层逻辑。例如,对比本文开头清单1中的JSP 代码和清单17 中显示的通过JSTL 实现的同样功能。(JSTL core库中其余的标记,包括及其子标记,将在本系列的下一篇文章中讨论。)尽管显然执行了条件逻辑,但是JSTL 版本中没有Java 语言源代码,并且标记之间的关系(尤其是关于嵌套需求)对于任何精通HTML 语法的人都应该是熟悉的。

清单17. 合并 以提供缺省变量值

通过提供大多数Web 应用程序常用功能的标准实现,JSTL 有助于加速开发周期。与EL 结合起来,JSTL 可以不需要对表示层程序编写代码,这极大地简化了JSP 应用程序的维护。

JSTL 入门:探讨core使用定制标记进行流控制和URL 管理

顾名思义,JSP 标准标记库(JSP Standard Tag Library,JSTL)core库为一些基本功能(如,管理限定了作用域的变量和与URL 交互等)和基本操作(如,迭代和条件化)提供了定制标记。这些

标记不仅可以由页面设计人员直接利用,而且还为与其它JSTL 库相结合从而提供更复杂的表示逻

辑奠定了基础。Mark Kolb 在本文中继续对JSTL 和core库进行探讨,研究用标记来协助流控制和URL 管理。

通过阅读本系列的第一篇文章,您对JSTL 有了初步的了解。我们描述了使用其表达式语言(EL)来访问数据和操作数据。正如您所了解的那样,EL 用来为JSTL 定制标记的属性赋予动态值,因此,它所起的作用与JSP 表达式一样,为内置操作及其它定制标记库指定请求时的属性值。

为了演示EL 的用法,我们介绍了core库中的三个标记:

用于管理限定了作用域的变量;而用于显示数据,尤其是显示用EL 计算出的值。在此基础上,接下来本文把注意力集中在core库的其余标记上,这些标记可以大致归为两大类别:流控制和URL 管理。

示例应用程序

为了演示JSTL 标记,我们将使用来自一个工作应用程序的示例,本系列中余下的文章都将使用此应用程序。由于基于Java 的Weblog 日渐流行及为人们所熟悉,因此我们将出于此目的使用一个简单的基于Java 的Weblog;参阅参考资料以下载该应用程序的JSP 页面和源代码。Weblog(也称为blog)是一种基于Web 的简短注释的日志,这些注释是有关Weblog 的作者所感兴趣的主题,通常带有与Web 上其它地方的相关文章及讨论的链接。图 1 中显示了该应用程序正在运行时的抓屏。

图 1. Weblog 应用程序

虽然完整的实现需要二十四个Java 类,但在表示层中却只涉及Weblog 应用程序中的两个类,Entry和UserBean。这样,对于理解JSTL 示例而言,只有这两个类比较重要。图 2 显示了Entry和UserBean的类图。

图 2. Weblog 应用程序的类图

Entry类表示Weblog 中一个标有日期的项。其id属性用于在数据库中存储及检索该项,而title和text属性则表示该项的实际内容。created和lastModified属性引用了Java 语言中Date类的两个实例,分别用来表示最初创建该项的时间和最后编辑该项的时间。author 属性引用了标识该项的创建者的UserBean实例。

UserBean类存储了有关应用程序的已认证用户的信息,如用户名、全名和电子邮件地址。该类还包含一个用于与相关数据库进行交互的id属性。其最后一个属性roles引用一列String值,这列值标识与相应用户相关的、特定于应用程序的角色。对于Weblog 应用程序,相关的角色是“User”(所有应用程序用户常用的缺省角色)和“Author”(该角色指定可以创建和编辑Weblog 项的用户)。

流控制

由于可以用EL 替代JSP 表达式来指定动态属性值,因此页面创作人员无需使用脚本编制元素。因为脚本编制元素可能是引起JSP 页面中维护问题的主要原因,所以JSTL 的主要优点就在于提供了这样简单(且标准)的替代方法。

EL 从JSP 容器检索数据,遍历对象层次结构,然后对结果执行简单的操作。不过,除了访问和操作数据之外,JSP 脚本编制元素的另一个常见用法是流控制。尤其是,页面创作人员常借助scriptlet 来实现迭代或条件内容。然而,因为这样的操作超出了EL 的能力,所以core库提供了几个定制操作来管理流控制,其形式有迭代、条件化和异常处理。

迭代

在Web 应用程序环境中,迭代主要用于访存和显示数据集,通常是以列表或表中的一系列行的形式显示。实现迭代内容的主要JSTL 操作是定制标记。该标记支持两种不同样式的

迭代:整数范围上的迭代(类似Java 语言的for语句)和集合上的迭代(类似Java 语言的Iterator和Enumeration类)。

进行整数范围迭代用到了清单 1 中所示的标记的语法。begin和end属性要么是静态整数值,要么是可以得出整数值的表达式。它们分别指定迭代索引的初始值以及迭代索引的终止值。当使用在整数范围内进行迭代时,这两个属性是必需的,而其它所有属性都是可选的。

清单 1. 通过 操作进行数字迭代的语法

当出现step时,它也必须是整数值。它指定每次迭代后索引的增量。这样,迭代索引从begin属性的值开始,以step属性的值为增量进行递增,在迭代索引超过end属性的值时停止迭代。注:如果省略了step属性,那么步长缺省为1。

如果指定了var属性,那么将会创建一个带有指定名称的并限定了作用域的变量,并将每次迭代的当前索引值赋给该变量。这一限定了作用域的变量具有嵌套式可视性—只可以在标记体内对其进行访问。(我们很快将讨论可选属性varStatus的用法。)清单 2 显示了对一组固定整数值进行迭代的操作示例。

清单 2. 使用 标记来生成表列数据,这些数据对应于某一范围内的数值。

如图 3 中所示,上面的示例代码生成了一张表,显示前五个偶数及其平方。这是通过将begin和step属性值指定为2,而将end属性值指定为10 实现的。此外,用var属性创建用于存储索引值的限定了作用域的变量,标记体内引用了该变量。尤其是,使用了一对

操作来显示索引及其平方,其中索引的平方是使用一个简单的表达式计算得来的。

图 3. 清单 2 的输出

在对集合的成员进行迭代时,用到了标记的另一个属性:items属性,清单 3 中显示了该属性。当使用这种形式的标记时,items属性是唯一必需的属性。items 属性的值应该是一个集合,对该集合的成员进行迭代,通常使用EL 表达式指定值。如果变量名称是通过标记的item属性指定的,那么对于每次迭代该已命名变量都将被绑定到集合后续元素上。

清单 3. 通过 操作对集合进行迭代的语法

标记支持Java 平台所提供的所有标准集合类型。此外,您可以使用该操作来迭代数组(包括基本类型数组)中的元素。表 1 列出了items属性所支持的所有值。正如表的最后一行所指出的那样,JSTL 定义了它自己的接口javax.servlet.jsp.jstl.sql.Result,用来迭代SQL 查询的结果。(我们将在本系列后面的文章中详细讨论这一功能。)

表 1. 标记的items属性所支持的集合

可以使用begin、end和step属性来限定在迭代中包含集合中哪些元素。和通过

进行数字迭代的情形一样,在迭代集合中的元素时同样要维护一个迭代索引。

标记实际上只处理那些与索引值相对应的元素,这些索引值与指定的begin、end 和step值相匹配。

清单 4 显示了用来迭代集合的标记。对于该JSP 代码段,entryList这一限定了作用域的变量被设置成了Entry对象列表(确切的说,ArrayList)。标记依次处理列表中的每个元素,将其赋给一个限定了作用域的变量blogEntry,然后生成两个表行—一个用于Weblog 项的title,另一个则用于该项text。这些特性是通过一对带有相应EL 表达式的操作从blogEntry变量检索得到的。注:由于Weblog 项的标题和文本都可能包含HTML 标记,因此这两个标记的escapeXml属性都被设置成了false。图 4 显示了结果。

清单 4. 使用 标记显示表示给定日期的Weblog 项

图 4. 清单 4 的输出

不论是对整数还是对集合进行迭代,剩余的属性varStatus所起的作用相同。和var属性一样,varStatus用于创建限定了作用域的变量。不过,由varStatus属性命名的变量并不存储当前索引值或当前元素,而是赋予

javax.servlet.jsp.jstl.core.LoopTagStatus类的实例。该类定义了一组特性,它们描述了迭代的当前状态,表 2 中列出了这些特性。

表 2. LoopTagStatus 对象的特性

JavaWeb应用开发实用教程习题部分汇总

表单中要提交数据到指定的处理文件由表单的( C )属性指定。 A. method B. name C. action D. 以上都不对 以下URL中语法不正确的是( D ) A. https://www.doczj.com/doc/a15303830.html,:80/download/home.html B. telnet://https://www.doczj.com/doc/a15303830.html,:70 C. ftp://https://www.doczj.com/doc/a15303830.html, D. https://www.doczj.com/doc/a15303830.html, 要运行JSP程序,下列说法不正确的是( B ) A. 服务器端要安装Servlet容器,如Tomcat等 B. 客户端需要安装Servlet容器,如Tomcat等 C. 服务器端需要安装JDK D. 客户端需要安装浏览器,如IE等 当发布Web应用程序时,通常把Web应用程序的目录及文件放到Tomcat的( C )目录下。 A. work B. temp C. webapps D. conf 下面关于HTTP说法不正确的是( D ) A. HTTP是Web应用所使用的主要协议 B. HTTP是一种超文本传输协议,是基于请求响应模式的 C. HTTP是无状态协议 D. HTTP的请求和响应消息如果没有发送并成功传递,则HTTP可以保存已传递的信息 下面关于Servlet的描述错误的是( C ) A. 一个Servlet就是Java中的一个类 B. Servlet是位于Web服务器内部的服务器端的Java应用程序 C. Servlet可以由客户端的浏览器解释执行 D. 加载Servlet的Web服务器必须包含支持Servlet的Java虚拟机 有关Servlet的调用,下列说法错误的是( D ) A. 可以通过在浏览器的地址栏中输入URL来调用Servlet B. 可以通过表单的action属性来调用一个Servlet接受表单信息 C. 可以在标记中调用Servlet D. 只有上述3种调用Servlet的方法 下面不属于JSP指令的是( B ) A. include B. import C. page D. taglib page指令用于定义JSP文件中的全局属性,下列关于该指令用法的描述不正确的是( D ) A. <%@ page %>作用于整个JSP页面 B. 可以在一个页面中使用多个<%@ page %>指令 C. 为增强程序的可读性,建议将<%@ page %>指令放在JSP文件的开头,但不是必须的

Web 程序设计上机指导书

Web 程序设计上机指导书 使用说明:《Web 程序设计上机指导书》是配合《JSP2.0应用教程》的各个章节技术安排编写的,通过13个上机的完成,循序渐进的学会使用JSP2.0技术从事Web应用软件的开发,在课程的最后使同学们完成一个班级论坛的软件开发任务。本上机指导书是在总结以往教学中的经验教训,就如何让学生对所学内容有更好的整体把握,对JSP技术有更好的认识而提出的。思想源于我和史江萍老师在假期的一次讨论,觉得应该设计出一套比较系统的上机内容,让同学们对整个的项目技术有所了解,最后由杨弘平执笔编写仅供学生上机参考使用,不当之处,请大家指正。 目录 上机一WEB 应用开发环境配置 上机二JSP页面中的元素 上机三 JSP页面出错处理和设计 上机四JSP的对象 上机五功能模块编写 上机六 EL表达式的使用 上机七 JSTL标准标签库的使用 上机八 JSTL的其它标签的应用 上机九 MySQL数据库的使用 上机十使用SQL标记库连接数据库 上机十一 JDBC的方式连接数据库 上机十二JavaBean 编程 上机十三 Servlet编程

上机一WEB 应用开发环境配置 内容:搭建JSP工作环境,包括Java JDK的安装、Tomcat服务器的安装、熟悉MyEclipse开发环境、构建班级论坛的第一个JSP的index.jsp首页面。 1. 安装JDK 在磁盘上找到jdk-6-windows-i586.exe 运行安装程序,设定安装路径为D:\jdk1.6.0, 其余接受默认安装。 安装结束后,配置环境变量包括java_home,path和 classpath其操作步骤如下: 1)用鼠标右击?我的电脑?,选择?属性?,→?高级?→?环境变量?→?系统变量?→?新建?→在?变量名?输入框中写入?java_home?,在?变量值?输入框中写入?D:\jdk1.6.0?→点击?确定? 2)选中?系统变量?查看是否有classpath项目,→如果没有就点击?新建?,→如果已经存在就选中classpath选项,→点击?编辑?按钮,→然后在?变量名?中填写?classpath?,→在?变量值?中填写?.;D:\jdk1.6.0\lib;D:\jdk1.6.0\jre\lib? 3)同上在?path?设定时,?变量名?输入框填写?path?,?变量值?

自定义标签的整理(新手教程)

在J2EE项目中,JSP页面常常通过在静态页面模板中嵌入scriptlets来插入动态的内容。 然而,随着复杂程序的增加,JSP页面也变得难于管理。虽然用这种方法开发小形项目唾手可得, 但是scriptlets仍然要面对下面的不利情况: Scriptlet难于阅读和修改。带有Scriptlets的JSP 页面混合了两种语言,这使得阅读和维护变得很困难。 Scriptlets鼓励了将数据表现和逻辑处理的混合。JSP 页面主要功能是数据表现而不是逻辑处理。逻辑处理属于Java类的工作,他们应该由程序员维护并能够重用。 Scriptlets不能够被重用。当scriptlets被重用时,常常是鼓励拷贝-粘贴来达到重用的效果,这是一种危险的维护方法。每一次你拷贝-粘贴scriptlets时,将有更多行多余的代码需要维护。 Scriptlets的参数很难进行确定传递. 无论如何,绝大数人简单的拷贝,粘贴、编辑或者类似的增加,使得大部份的多余的代码需要更多的维护。 与其创建充满了scriptlets的巨大的JSP页面,不如考虑使用用户自定义标签。用户自定义标签允许你创建、在JSP中使用你自己定义的类HTML标签。每当JSP引擎遇到用户自定义标签时,就会自动查找标签处理类,并自动调用他。页面中的自定义标签将会被票签处理类的输出所代替。这就

使得JSP页面不用直接在页面写Java代码,就可以指定生成动态的内容的。 用户自定义标签为你的网页设计提供了N种好处:他提高了页面代码的可读性。页面设计人员而不是程序员,能够使用很比使用Scriptlets更容易的使用标签。维护代码的程序员也只需个性标签库面不是JSP页面,这样他就不要再冒着破坏页面美观的风险。在使用标签的每一处,增强或者固定的标签改变了标签了的表现。标签比Scriptlets更容易确定参数,因为他会被作为一种属性或者在标签体内被传达。最后,标签比Scriptlets高度的可重用性,因为你可以创建共享的、可重用的自定义标签库。 JSTL提供的就是这种标准的自定义标签集。 让我们通过看一个简单的JSP页面例子,来看看如何使用自定义标签。下面这个页面使用scriptlet来得到数据: <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="java.util.Date" %> Sample JSP

The date and time at the server are: <% String sformat = "EEEE, d MMMM yyyy 'at' kk:mm:ss z"; SimpleDateFormat format = new SimpleDateFormat(sformat); Date date = new Date(); String sdate = format.format(date); out.print(sdate); %>

尚学堂java视频学习顺序(由十年整理)

尚学堂视频学习顺序 1. 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第1章_JAVA简介_源代码_及重要说明尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第2章_基础语法 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第2章_递归补充 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第3章_面向对象 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第4章_异常处理 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第5章_数组 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第5章_数组 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第6章_常用类 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第7章_容器 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第8章_IO 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第9章_线程 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第10章_网络 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第11章_GUI 2. 尚学堂科技_马士兵_在线聊天系统雏形视频教程_java_eclipse 3 尚学堂科技_马士兵_坦克大战视频教程_java_eclipse 4 尚学堂科技_马士兵_坦克大战图片版 5 尚学堂科技_马士兵_坦克大战网络版视频教程 6 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_专题_日期处理 7 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_专题_正则表达式 8 尚学堂科技_张志宇_SERVLET_JSP_视频教程_第一版 9 尚学堂科技_马士兵_JDBC_MYSQL_BBS项目课堂实录视频教程 10 尚学堂科技_马士兵_BBS_项目补充_MySQL简明视频教程 11

Java基础教程1.pdf

课程主题实训内容实训目标实训项目Unix/Linux开发环境 Unix开发环境Unix系统原理、Unix开发环境、Unix常用命令。 熟练掌握Unix常用命令;熟练构建Unix下的 Java开发环境。构建商业开发环境 Java语言核心 Java语言基础算法基础、常用数据结构、企业编程规范。 掌握常见的数据结构和实用算法;培养良好的企 业级编程习惯。 算法工具集、CommonsUtils Java面向对象设计面向对象特性:封装、继承、多态等。 掌握面向对象的基本原则以及在编程实践中的 意义;掌握Java面向对象编程基本实现原理。应用程序的发布与打包、猜数字程序的实现、类的抽象、五子棋游戏控制台版本 JDK核心API 语言核心包、异常处理、常用工具包、 集合框架。 熟练掌握JDK核心API编程技术;理解API设 计原则;具备熟练的阅读API文档的能力;为 后续的课程学习打下坚实的语言基础。 Commons-lang包部分功能、 MyArrayList类的实现、表达式解 析、基于加密的消息发送器、升级 版猜数字游戏、简单记事本程序 Oracle数据库技术 SQL语言SQL语句基础和提高、SQL语句调优。 熟练的掌握SQL语句;掌握一定的数据库查询 技巧及SQL语句优化技巧。 SQL高级查询实例Oracle数据库开发 Oracle体体系结构及系统管理、Oracle数据库 高级编程、数据库设计基础。 掌握Oracle体系结构及核心编程技术。Oracle高级编程实例JavaSE高级程序设计 JavaSE核心异常处理、多线程基础、IO系统、网络编程、Swing 组件、JVM性能调优(JVM内存结构剖析、GC基 本原理、GC分析及调优、JVM内存参数优化)、 Java泛型、JDK新特性。 熟练掌握JavaSE核心内容,特别是IO和多线 程;初步具备面向对象设计和编程的能力;掌 握基本的JVM优化策略。 BMP文件处理程序的实现、 URLEncoder功能实现、答题系统、 生产者和消费者问题、多线程文件 下载器 XML XML语法、XML解析(SAX、DOM)、Dom4j组件、 Digester组件。熟练掌握XML语法规则;理解DOM模型;熟悉Java 对XML的各种解析方式。 基于XML数据格式的题库处理程序 JDBC JDBC核心API(Connection、 Statement、 ResultSet)、JDBC 优化(缓存技术、批处理技 术、连接池技术)。 理解JDBC作为规范的设计原则;熟练掌握JDBC API;具备使用JDBC对数据库进行高效访问的 能力。 SQL前端工具、数据采集和存储程 序、数据整合功能程序、项目管理 系统DAO实现 软件工程及OOAD

DEBUG 使用教程 查错 排错 debug 模式 大全

1.项目报错,即eclipse里面项目工程有红叉 eclipse中打开Problems视图,window->show view->other->General->Problems 通过Problems视图中的错误信息,找到错误源 (有可能是java文件, 或者(xml,有可能是 1.xml有错;2.含有错误字符(比如从word复制过来);3.假报 ) buildpath -> eclipse中工程,右键->Build Path-> Configure Build path -> Libraries选项卡 察看 JRE System Library(引入jdk自带包0), Server Runtime (引入jsp/servlet实现包, 比如Apache Tomcat V6.0 (这个是window->preferences->server下定义的Runtime Environment对应) ) Web App Libraries(包含了eclipse中项目工程自带的WEB-INF/lib 下引入的jar包) junit(调试用,不一定需要) User Library(一般eclipse使用者把自己引入的jar包放在一起,定义

一个library,在eclipse中引用) 2.项目启动,控制台报错 察看控制台错误信息 可能错误信息包括: 1.session factory(可能是hibernate的实体类定义错误), 控制台一般看到dao,sessionFactory,hibernate的关键字 eg. Caused by: org.hibernate.PropertyNotFoundException: Could not find a getter for name1 in class demo.ssh2.model.Role at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicProperty Accessor.java:306) at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAc cessor.java:299) at org.hibernate.mapping.Property.getGetter(Property.java:294)

JSF入门教程

JSF入门教程1.入门 1.1 简介JSF 1.2 第一个JSF程序 1.3 简单的导航 Navigation 1.4 导航规则设置 1.5 JSF Expression Language 1.6 国际化信息 2. Managed Beans 2.1 Backing Beans 2.2 Beans的配置与设定 2.3 Beans上的List, Map 3. 数据转换与验证 3.1 标准转换器 3.2 自定义转换器 3.3 标准验证器 3.4 自定义验证器 3.5 错误信息处理 3.6 自定义转换, 验证标签 4. 事件处理 4.1 动作事件 4.2 即时事件 4.3 值变事件 4.4 Phase事件

JSF 入门 如果您是从使用的角度来看JSF,则您不用理会HTTP、数据转换等细节,JSF 将细节都隐藏起来了,无论您是网页设计人员或是应用程序设计人员,都可以使用自己熟悉的方式来看JSF。 1. 入门 借由以下的几个主题,可以大致了解JSF的轮廓与特性,我们来看看网页设计人员与应用程序设计人员各负责什么。 1.1 简介JSF Web应用程序的开发与传统的单机程序开发在本质上存在着太多的差异,Web 应用程序开发人员至今不可避免的必须处理HTTP的细节,而HTTP无状态的(stateless)本质,与传统应用程序必须维持程序运行过程中的信息有明显的违背,再则Web应用程序面对网站上不同的使用者同时的存取,其执行线程安全问题以及数据验证、转换处理等问题,又是复杂且难以解决的。 另一方面,本质上是静态的HTML与本质上是动态的应用程序又是一项违背,这造成不可避免的,处理网页设计的美术人员与程序设计人员,必须被彼此加入至视图组件中的逻辑互相干扰,即便一些视图呈现逻辑以标签的方式呈现,试图展现对网页设计美术人员的亲切,但它终究必须牵涉到相关的流程逻辑。 有很多方案试着解决种种的困境,而各自的着眼点各不相同,有的从程序设计人员的角度来解决,有的从网页设计人员的角度来解决,各种的框架被提出,所造成的是各种不统一的标签与框架,为了促进产能的集成开发环境(IDE)难以整合这些标签与框架,另一方面,开发人员的学习负担也不断的加重,他们必须一人了解多个角色的工作。 JavaServer Faces的提出在试图解决这个问题,它试图在不同的角度上提供网页设计人员、应用程序设计人员、组件开发人员解决方案,让不同技术的人员可以彼此合作又不互相干扰,它综合了各家厂商现有的技术特点,由Java Community Process(JCP)团队研拟出来的一套标准,并在2004年三月发表了JavaServer Faces 1.0实现成果。 从网页设计人员的角度来看,JavaServer Faces提供了一套像是新版本的HTML 标签,但它不是静态的,而是动态的,可以与后端的动态程序结合,但网页设计人员不需要理会后端的动态部份,网页设计人员甚至不太需要接触JSTL这类的标签,也可以动态的展现数据(像是动态的查询表格内容),JavaServer Faces提供标准的标签,这可以与网页编辑程序结合在一起,另一方面,JavaServer Faces也允许您自定义标签。 从应用程序设计人员的角度来看,JavaServer Faces提供一个与传统应用程序开发相类似的模型(当然因某些本质上的差异,模型还是稍有不同),他们可以基于事件驱动来开发程序,不必关切HTTP的处理细节,如果必须处理一些视觉组件的属性的话,他们也可以直接在整合开发环境上拖拉这些组件,点选设定组件的属性,JavaServer Faces甚至还为应用程序设计人员处理了对象与字符串(HTTP传送本质上就是字符串)间不匹配的转换问题。

SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)

SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis) 使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些。以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下。这次,先说说三大框架整合过程。个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助。不过,如果用都不会,谈思想就变成纸上谈兵了!!!先技术,再思想。实践出真知。(可通过图片水印查看博客地址)1、基本概念 1.1、Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的 Java 开发框架,由Rod Johnson 在其著作 Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 1.2、SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在 Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。 1.3、MyBatis

spring3.0MVC中文教程

Spring3 MVC - 3到Spring MVC框架简介 Spring3 MVC框架简介 Spring MVC是Spring的框架的Web组件。它提供了丰富的功能,为建设强大的Web应用程序。Spring MVC框架的架构,并在这样的高度可配置的方式,每一块的逻辑和功能设计。此外Spring可以毫不费力地与其他流行的Web框架,如Struts,WebWork的,的Java Server Faces和Tapestry集成。这意味着,你甚至可以告诉Spring使用Web框架中的任何一个。比Spring更不紧耦合的servlet或JSP 向客户端呈现视图。喜欢速度与其他视图技术集成,Freemarker的,Excel或PDF现在也有可能。 Spring3.0 MVC系列 ?第1部分:到Spring 3.0 MVC框架简介 ?第2部分:在Spring 3.0 MVC创建Hello World应用程序 ?第3部分:在Spring 3.0 MVC的形式处理 ?第4部分:Spring3 MVC的Tiles Support与Eclipse中的例子插件教程 ?第5部分:Spring3 MVC的国际化及本地化教程与范例在Eclipse ?第6部分:Spring3 MVC示例教程Spring主题 ?第7部分:创建Spring3 MVC Hibernate 3的示例在Eclipse中使用Maven的 在Spring Web MVC,你可以使用任何对象作为命令或表单支持对象,你不需要实现框架特定的接口或基类。Spring的数据绑定是高度灵活的:例如,将验证错误类型不作为应用系统错误,可以通过评估的不匹配。因此,你不必重复你的业务对象的属性,简单的无类型的字符串,在表单对象仅仅是为了处理无效的意见,或正确转换的字符串。相反,它往往是最好直接绑定到业务对象。 请求处理生命周期 Spring的Web MVC框架是,像许多其他Web MVC框架,要求为导向,围绕一个中心的servlet,它把请求分派给控制器,提供其他功能,有利于开发Web应用而设计的。Spring DispatcherServlet DispatcherServlet是Spring IoC容器完全集成,并允许我们使用的每一个Spring的其他功能。

eclipse搭建JSF的教程(亲测)

1.新建dynamic web project,选择configuration,如图所示: 2.新建之后,显示如下:

3.创建 4.新建userChoose.jsp,newJava.jsp,newC.jsp (1) userChoose.jsp <%@page language="java"import="java.util.*" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@taglib uri="https://www.doczj.com/doc/a15303830.html,/jsf/core"prefix="f"%> <%@taglib uri="https://www.doczj.com/doc/a15303830.html,/jsf/html"prefix="h"%> My JSF 'index.jsp' starting page JSF测试信息!
请选择查询项目:

JavaEE编程作业讲解

Java EE编程技术(一) 实训报告 题目:图书管理系统系统 设计者:赵硕 专业班级:计应14-4 学号:411420010029 2015 年07月09日 河南理工大学计算机学院

1.1项目背景和需求分析 1.1.1项目背景 对易读性的追求。再设计的过程中我们应该根据实际的情况进行设计,做到具体问题随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。书籍做为人类的精神食粮,在现代社会中越来越受到重视,大量的书籍出现在市场上,人们有了各种各样不同的选择。与此同时,为了管理大量的图书,图书管理系统也大量的出现,随着图书的大量增加,其管理难度也越来越大,如何优化管理也就成为了一个大众化的问题。 现已有的图书管理系统,其功能已十分强大,为了便于管理员对图书管理系统进行妥善的管理和读者的查询,图书管理系统为管理员提供了管理日志、管理员添加、管理员切换、读者添加、读者修改、读者查询、读者删除、新书入库等功能,为读者提供了书籍查询、读者借阅信息查询、图书网上续借等很多功能。 大学为我们提供了自由的学习环境,使我们有更多的时间到图书馆借阅书籍,让我们可以随时掌握各方面的知识,不断提高自我、充实自我,但由于图书馆藏书成千上万,我们很难一本一本的去查找自己感兴趣的书籍,因此我们会经常用到学校为我们提供的图书管理系统,用时间长了便对此产生了兴趣,正好本次课程设计为我们提供了良好的机会,让我们亲自设计并实现了图书管理系统的部分功能。 设计一个图书管理系统必不可少的必须对全管书籍进行分类汇总。而这就是我们所说的数据库设计的第一阶段:需求分析。在这一阶段除了对具体情况诸如实行对管理员的管理、对读者的管理、书籍管理、书籍的借阅与归还、借阅超时等功能的实现,还需要对用户的需求进行调查和分析,否则就失去了设计这个系统的意义了。 对于界面的设计我们应该追求的是:美观、易读性强、清晰度高;原则是:不能因为刻意追求美观而以整个界面的清晰度的牺牲作为代价,不能为了清晰度而抛弃具体分析,不刻意追求原则。 在对应的界面与MySQL数据库建立连接,并实现对应的SQL语句进行实现将产生的结果显示出来。并运用捕捉异常的方法,将异常信息显示出来。 实现SQL语句的时候借助前台开发工具中关于数据处理的控件来完成。对于读者而言他们的需求是了解图书的基本情况,自己的借阅情况。总而言之就是实现对各个

语言程序设计资料:netbeans使用教程-2

本教程中构建的 Midnight Cookie Company 应用程序将向您介绍如何执行以下操作: ?从现有源创建 web 项目 ?创建前端控制器 servlet ?创建用于处理请求和创建 cookie 的方法 ?创建接收请求的 JSP 页面 ?使用 JSTL 国际化应用程序 ?使用 IDE 的 HTTP 监视器分析部署的应用程序 下面是本教程中所使用的一些术语的解释。 ?合成视图 (Composite View)。用于演示 JSP 页面中信息的设计模式。该设计模式从组件视图中创建一个组合视图。组件视图可能包括页面的动态部分和模块部分。当您从多个子视图中创建视图时,合成视图设计模式与web 应用程序设计模式有关。合成的 web 页面通常来自各种资源的内容组成。页面的布局由其子视图的内容独立管理。例如,一个视图的子视图可能为 Navigation、Search、Feature Story 和 Headline。 当创建合成视图时,您既可以包含静态的内容,也可以包含动态的内容。静态内容由 HTML 文件组成。动态内容是 JSP 页面的一部分。可以在 JSP 安装时或运行时决定具体的内容。 ?前端控制器 (Front controller)。负责路由传入请求并在 web 应用程序中实施导航的组件。有关使用前端控制器设计模式的详细信息,请参阅构建 Web 组件编程系列书中的“前端控制器”部分,该书位于Sun? ONE Studio Developer Resources网站的文档页面中。 ?JSP 页 (JSP Page)。在 web 应用程序中用来向用户提供信息并能够使数据从终端用户流回服务器的文件。 JSP pages 必须放置在 web 应用程序中以便可以在 IDE 中执行 JSP pages。 ?Servlet。在 servlet 容器内执行的 Java 类,通常在 web 服务器内运行。Servlet 用于执行以下操作:o生成动态内容。 o扩展 web 服务器和支持 web 的应用程序的功能。 o使用请求-响应范例与 web 客户端(通常是浏览器应用程序,如 Netscape 或 Internet Explorer)进行交互。 该应用程序使用 JavaServer Pages Standard Tag Library (JSTL) 获取该应用程序中使用的动态数据以及国际化 JSP 页面。 当您构建 Midnight Cookie Company 应用程序时,本教程将带您浏览在 IDE 中的整个 web 开发过程。 完成本教程大约要花两个小时的时间。 开始编写代码之前,必须确保您具备所有必要的软件,并且保证正确设置项目。 开始之前,需要在您的计算机上安装以下软件: ?NetBeans IDE 5.0(下载)。 ?Java Standard Development Kit (JDK?) version 1.4.2(下载)或 5.0(下载) 也可以下载并使用 Sun Java System (SJS) Application Server(下载)、JBoss 或 WebLogic。但是,与 IDE 绑定在一起的 Tomcat Web Server 可以提供两层 Web 应用程序(如本快速入门指南中描述的)所需的全部支持。仅当您要开发企业应用程序时才需要应用服务器(如 SJS Application Server、Jboss 或 WebLogic)。

尚学堂视频学习顺序(必看)

尚学堂视频学习顺序(必看) 尚学堂视频学习顺序2009-04-22 21:19尚学堂科技_马士兵_JDK5.0下载-安装-配置 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第1章_JAVA简介_源代码_及重要说明 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第2章_基础语法 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第2章_递归补充 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第3章_面向对象 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第4章_异常处理 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第5章_数组 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第5章_数组 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第6章_常用类 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第7章_容器 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第8章_IO 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第9章_线程 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第10章_网络 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第11章_GUI 尚学堂科技_马士兵_在线聊天系统雏形视频教程_java_eclipse 尚学堂科技_马士兵_坦克大战视频教程_java_eclipse 尚学堂科技_马士兵_坦克大战图片版 尚学堂科技_马士兵_坦克大战网络版视频教程 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_专题_日期处理 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_专题_正则表达式 尚学堂科技_张志宇_SERVLET_JSP_视频教程_第一版 尚学堂科技_马士兵_JDBC_MYSQL_BBS项目课堂实录视频教程 尚学堂科技_马士兵_BBS_项目补充_MySQL简明视频教程 尚学堂科技_马士兵_JAVA_系列视频教程_BBS_2007 尚学堂科技_马士兵_JAVA_网上商城项目视频讲解 尚学堂科技_马士兵_轻松愉快LINUX视频教程 尚学堂科技_马士兵_设计模式_01_Observer 尚学堂科技_王勇_JAVA视频教程_XML01_XML 尚学堂科技_王勇_JAVA视频教程_XML02_XSL 尚学堂科技_王勇_JAVA视频教程_XML03_DTD_Schema 尚学堂科技_王勇_JAVA视频教程_XML04_JDOM对XML文件的读取 尚学堂科技_王勇_JAVA视频教程_Struts01_源代码及重要说明 尚学堂科技_王勇_JAVA视频教程_Struts02_多层架构及MVC 尚学堂科技_王勇_JAVA视频教程_Struts03_第一个项目 尚学堂科技_王勇_JAVA视频教程_Struts04_小结及作业 尚学堂科技_王勇_JAVA视频教程_Struts05_Struts标签库 尚学堂科技_王勇_JAVA视频教程_Struts06_JSTL_EL表达式 尚学堂科技_王勇_JAVA视频教程_Struts07_JSTL_核心库 尚学堂科技_王勇_JAVA视频教程_Struts08_JSTL_格式化库及函数库

相关主题
文本预览
相关文档 最新文档