当前位置: 代码迷 >> JavaScript >> 四-2 JSP中的JSTL、POJO、MVC
  详细解决方案

四-2 JSP中的JSTL、POJO、MVC

热度:346   发布时间:2013-11-08 17:51:56.0
4-2 JSP中的JSTL、POJO、MVC

1 JSTL

JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。

1.1 JSTL的作用

JSTL 有助于加速开发周期,极大地简化了 JSP 应用程序的开发和维护。

1.2 JSTL的使用

将jstl.jar和 standard.jar文件放到classpath中,如果你还需要使用XML processing及Database access (SQL)标签,还要将相关JAR文件放到classpath中,在JSP页面头部加入<%@ taglib prefix="..." uri="..." %>,然后在这个JSP页面中就可以使用这个引入的标签了。

1.3 JSTL中常用标签

核心标签库、国际化标签(I18N)

1.3.1 核心标签库

Core 标签库主要包括了一般用途的标签、条件标签、迭代标签和 URL 相关的标签。在 JSP 页面使用 Core 标签,要使用 taglig 指令,指定引用的标签库,如下:

<%@ taglib uri=”http://java.sun.com/jsp/jstl/core”  prefix=”c” %>

  • out标签

<c:out>的功能与JSP中的<%= 表达式%>类似,用于向页面输出,其语法格式分为如下五种:

  1. 通过在<c:out>中的value属性指定需要显示的值。<c:out value="value"/>
  2. 通过escapeXml属性设置是否将value中的内容按照原样输出。因为<c:out>默认会将<、>、’、”、&转换成<、>、'、"和&。如果不想转换,只需要设定escapeXml属性为“false”。<c:out value="value" escapeXml="true | false"/>
  3. 通过default属性来指定默认值。如果value的值为null时,则显示default的值。<c:out value="value" default="No data"/>
  4. 通过本体内容来指定默认值。如果value的值为null时,则显示default的值。<c:out value="value" escapeXml="true | false"/>本体内容</c:out>
  • set标签

.<c:set>用于设置范围变量的值或者 javabean 对象的属性,其语法格式分为如下五种:

  1. 指定变量名以及变量值,不指定scope(范围)。<c:set var="username" value="value"></c:set>
  2. 将value的值储存到范围为scope的变量中。<c:set var="username" value="value" scope=”page | request | session | application”></c:set>
  3. 将本体内容的数据储存至范围为scope的变量中。<c:set var="varname" scope=”page | request | session | application”>本体内容</c:set>
  4. 将value值储存到targer对象的属性中。<c:set value=”value” target=”target” property=”propertyName”></c:set>
  5. 将本体内容的数据储存到targer对象的属性中。<c:set target=”target” property=”propertyName”>本体内容</c:set
  • remove标签

<c:remove>用来移除指定范围的变量。其语法格式如下:

<c:remove var=”number” scope=”session”>,var属性指定待删除变量的名称,scope属性是可选的,用来指定删除变量的范围,缺省为page。

  • if标签

<c:if>标签用来执行流程控制,其功能和Java语言中的if完全相同。<c:if>标签有两种语法格式:一种没有本体内容,一种有本体内容。

  1. 没有本体内容的<c:if>标签格式如下。<c:if test = ”testCondition” var=”varName”  [scope=”{page | request | session | application}]” />其中test属性是必须填写的,表示进行判断的表达式。属性var定义变量,该变量存放判断后的结果。scope表示var定义变量储存的范围。
  2. 有本体内容的<c:if>标签格式如下。<c:if test = ”testCondition” var=”varName”  [scope=”{page | request | session | application}]” >本体内容</if>其中test属性是必须填写的,当test中表达式的结果为true时,则会执行本体内容;如果为false则不会执行。
  • choose、when、otherwise标签

<c:if>标签只能判断一个表达式,而且无法指定如果表达式不成立执行语句。JSTL同样提供了类似于if....else....的语句<c:choose>标签。<c:choose>中可以有一个或多个<c:when>标签,有零个或多个<c:otherwise>标签。其语法格式如下:

<c:choose>

<c:when test = ”testCondition”>

</c:when>

...

<c:oherwise>

</c:oherwise>

</c:choose>

  • forEach标签

<c:forEach>标签两种语法格式。一种用来遍历集合对象的成员,一种用来使语句循环执行指定次数。

  1. <c:forEach>遍历集合对象的成员,语法格式如下:<c:forEach [var=”varname”] items=”collection” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>本地内容</forEach>,其中“var”用来存放现在指到的成员;“items”指被迭代的集合对象;“varStatus”用来存放现在指到的相关成员的信息;“begin”表示开始位置(默认为0);“end”表示结束位置。“step”表示步长(默认为1)。
  2. <c:forEach>指定语句执行次数,其语法格式如下:<c:forEach [var=”varname”] [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>本地内容</forEach>
  • forTokens标签

<c:forTokens>用来根据指定分隔符分割字符串。其语法格式如下:

<c:forTokens [var=”varname”] items=”stringOfTokens” delims=”delimiters” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>本地内容</c:forTokens>

其中“var”、“varStatus”、“begin”、“end”、“step”属性和<c:forEach>标签中用法一样。“items”属性表示被分割的字符串,“delims”属性指定分隔符。<c:forTokens>不仅可以分割仅有一个分隔符的字符串,也可以通过设定多个分割符来分割有多个分隔符的字符串,只需要设置多个分隔符就可以了。

  • import标签

<c:import>可以把其他静态或动态的文件包含到本身的JSP网页中。它和JSP动作指令的<jsp:include>最大的差别在于:<jsp:include>只能包含和自己在同一Web application下的文件;而<c:import>除了能够包含和自己的同一Web application的文件外,也可以包含不同Web application或者其他网站的文件。<c:import>的语法格式如下:

<c:import url=”url” [context=”context”] [var=”varName”] [scope=”{page | request | session | application}”] [charEncoding=”charEncoding”]>本体内容</c:import>或

<c:import url=”url” [context=”context”] varReader=”varReaderName” [charEncoding=”charEncoding”]>本体内容</c:import>

  • param标签

<c:param>标签用来传递参数,其包含两个参数name和value。< c:param>的语法格式如下:

<c:param name=“参数名” value=“参数值”>

1.3.2 国际化标签(I18N)

在JSP页面中要使用到格式化标签,必须使用<%@taglib%>指令,指定格式化标签。代码如下:

<%@ taglib  prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

  • formatNumber标签

<fmt: formatNumber>会根据区域或是定制的方式将数字格式化成数字、货币或百分比。语法分为两种,一种是没有本体内容,使用value属性来指定要格式化的数字;一种有本体内容,使用本体内容来指定要格式化的数字。格式如下:

<fmt:formatNumber  value=”number” [type={number | currency | percent}]

[pattern=”pattern”]

[currencyCode=” currencyCode”]

[currencySymbol=” currencySymbol”]

[groupingUsed=”{true | false}”]

[maxIntegerDigits=” maxIntegerDigits”]

[minIntegerDigits=” minIntegerDigits”]

[maxFractionDigits=” maxFractionDigits”]

[minFractionDigits=” minFractionDigits”]

[var=”varName”]

[scope=”{page | request | session | application}”]

/>

  • parseNumber标签

<fmt: parseNumber>用来将字符串类型的数字、货币或百分比转换成数字类型。和<fmt: formatNumber>标签的作用正好相反。语法同样分为两种,一种是没有本体内容,使用value属性来指定要转换成数字的字符串;一种有本体内容,使用本体内容来指定转换成数字的字符串。格式如下:

<fmt: parseNumber  value=”numberString” [type={number | currency | percent}]

[pattern=”pattern”]

[parseLocale=” parseLocale”]

[integerOnly=”{false | true}”]

[var=”varName”]

[scope=”{page | request | session | application}”]

/>

  •  formatDate标签

<fmt: formatDate>会根据区域或是定制的方式将日期或时间格式化,用来将日期类型转化成字符串类型日期。其语法格式如下:

<fmt: formatDate  value=”number” [type={time | date | both}]

[pattern=”pattern”]

[dateStyle=”{default | short | medium | long | full}”]

[timeStyle=”{default | short | medium | long | full}”]

[timeZone=” timeZone”]

[var=”varName”]

[scope=”{page | request | session | application}”

]/>

  •  parseDate标签

<fmt: parseDate>用来将字符串类型的时间或日期转换成日期时间类型。和<fmt: formatDate>标签的作用正好相反。语法同样分为两种,一种是没有本体内容,使用value属性来指定要转换成日期时间的字符串;一种有本体内容,使用本体内容来指定转换成日期时间的字符串。格式如下:

<fmt: parseDate  value=”date” [type={time | date | both}]

[pattern=”pattern”]

[dateStyle=”{default | short | medium | long | full}”]

[timeStyle=”{default | short | medium | long | full}”]

[timeZone=” timeZone”][var=”varName”]

[scope=”{page | request | session | application}”]

/>

  •  setTimeZone标签

<fmt: setTimeZone>用来设定默认时区或者是将时区储存到属性范围中。其语法格式如下:

<fmt:setTimeZone  value=”timeZone” [var=”varName”][scope=”{page | request | session | application}”]/>

  • timeZone标签

<fmt: timeZone>用来暂时的设定时区。其语法格式如下:

<fmt:timeZone  value=”timeZone”>本体内容</fmt:setTimeZones>

  • setLocale标签

<fmt: setLocale>标签用来设定用户的区域语言。这里所指的区域语言是指用户所在地区使用的语言种类以及国家和地区的综合。比如中国内地所使用的语言为中文,语言代码为“zh”,而地区代码为“cn”,所以中国内地的语言区域为“zh_cn”。<fmt:setLocale>的语法格式如下:

<fmt:setLocale value=”locale” [variant=”variant”][scope=”{page | request | session | application}”]/>

  • requestEncoding标签

<fmt: requestEncoding>用来设定接受的字符串的编码格式,与request.setCharacterEncoding()功能一样。<fmt: requestEncoding >的语法格式如下:

<fmt: requestEncoding value=”charseName”/>

  • setBundle标签

<fmt: setBundle>用来设定默认的数据来源,也可以将储存到一定范围中,供需要时使用。<fmt: setBundle>的语法格式如下:

<fmt: setBundle basename=” basename” [var=”varName”][scope=”{page | request | session | application}”]/>

  • message标签

<fmt: message>用来从指定的资源文件中通过索引(key)取得值(value)。其语法分为两种,一种是没有本体内容,使用key属性来指定要索引;一种有本体内容,使用本体内容来指定索引。语法格式如下:

<fmt: message key=”messageKey” [bundle=”resourceBundle”][var=”varName”][scope=”{page | request | session | application}”]/>

  • param标签

当从资源文件中取得信息时,可能需要动态设定参数,例如用户名等。这是就需要通过<fmt:param>来传递参数。其语法分为两种,一种是没有本体内容,使用value属性来指定要参数值;一种有本体内容,使用本体内容来指定参数值。语法格式如下:

没有本体内容,<fmt:param value=”messageParameter”/>

有本体内容,<fmt:param value=”messageParameter”>参数值</fmt:param>

  • bundle标签

<fmt: bundle>同样用来设定数据来源,但是与<fmt: setBundle>不同的是,<fmt: bundle>设定数据来源只对本体内容中的标签有效。其语法格式如下:<fmt:bundle basename=”basename” [prefix=”prefix”]>本体内容{<fmt:message>}</fmt:bundle>
message<fmt: setLocale>标签用来设定用户的区域语言。这里所指的区域语言是指用户所在地区使用的语言种类以及国家和地区的综合。比如中国内地所使用的语言为中文,语言代码为“zh”,而地区代码为“cn”,所以中国内地的语言区域为“zh_cn”。<fmt:setLocale>的语法格式如下。<fmt:setLocale value=”locale” [variant=”variant”][scope=”{page | request | session | application}”]/>timeZoneformatDateparseNumberformatNumber

2 POJO

POJO:POJO(Plain Old Java Objects)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。

使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑,有时可以作为VO(value -object)或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。 POJO实质上可以理解为简单的实体类,顾名思义POJO类的作用是方便程序员使用数据库中的数据表,对于广大的程序员,可以很方便的将POJO类当做对象来进行使用,当然也是可以方便的调用其get,set方法。

3 MVC

3.1 什么是MVC

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法。

3.2 MVC的作用

MVC是一个框架模式,它强制性的使应用的输入、处理和输出分开,便于开发和维护。

交流探讨到我的新浪微博:http://weibo.com/tianrui1990