??xml version="1.0" encoding="utf-8" standalone="yes"?>
在此特别要说明一下的是运行MyEclipse4.1的时候要选择MyEclipse4.1&4.2 GAq个选择才可以破解如?br>
MyEclipse_5.5M2_E3.2.2的官方下载地址 : http://www.myeclipseide.com/ContentExpress-display-ceid-110.html
MyEclipse4.1破解文g下蝲
U呼 Functions 标签库ؓ标签库,倒不如称呼其为函数库来得更容易理解些。因?/span> Functions 标签库ƈ没有提供传统的标{来?/span> JSP 面?nobr>工作服务Q而是被用?/span> EL 表达式语句中。在 JSP2.0 规范下出现的 Functions 标签库ؓ EL 表达式语句提供了许多更ؓ有用的功能?/span> Functions 标签库分Z大类Q共 16 个函数?/span>
q 长度函数Q?/span> fn:length
q 字符串处理函敎ͼ fn:contains ?/span> fn:containsIgnoreCase ?/span> fn:endsWith ?/span> fn:escapeXml ?/span> fn:indexOf ?/span> fn:join ?/span> fn:replace ?/span> fn:split ?/span> fn:startsWith ?/span> fn:substring ?/span> fn:substringAfter ?/span> fn:substringBefore ?/span> fn:toLowerCase ?/span> fn:toUpperCase ?/span> fn:trim
以下是各个函数的用途和属性以及简单示例?/span>
长度函数 fn:length 的出现有重要的意义。在 JSTL1.0 中,有一个功能被忽略了,那就是对集合的长度取倹{虽?/span> java.util.Collection 接口定义?/span> size ҎQ但是该Ҏ不是一个标准的 JavaBean 属性方法(没有 get,set ҎQ,因此Q无法通过 EL 表达式?/span> ${collection.size} ”来L取得?/span>
fn:length
函数正是Z解决q个问题而被
<%ArrayList arrayList1 = new ArrayList();
arrayList1.add("aa");
arrayList1.add("bb");
arrayList1.add("cc");
%>
<%request.getSession().setAttribute("arrayList1", arrayList1);%>
${fn:length(sessionScope.arrayList1)}
假设一?/span> ArrayList cd的实例?/span> arrayList1 ”,qؓ其添加三个字W串对象Q?/span> fn:length 函数后就可以取得q回l果为?/span> 3 ”?/span>
fn:contains 函数用来判断源字W串是否包含子字W串。它包括 string ?/span> substring 两个参数Q它们都?/span> String cdQ分布表C源字符串和子字W串。其q回l果Z?/span> boolean cd的倹{下面看一个示例?/span>
${fn:contains("ABC", "a")}<br>
${fn:contains("ABC", "A")}<br>
前者返回?/span> false ”,后者返回?/span> true ”?/span>
fn:containsIgnoreCase 函数?/span> fn:contains 函数的功能差不多Q唯一的区别是 fn:containsIgnoreCase 函数对于子字W串的包含比较将忽略大小写。它?/span> fn:contains 函数相同Q包?/span> string ?/span> substring 两个参数Qƈq回一?/span> boolean cd的倹{下面看一个示例?/span>
${fn:containsIgnoreCase("ABC", "a")}<br>
${fn:containsIgnoreCase("ABC", "A")}<br>
前者和后者都会返回?/span> true ”?/span>
fn:startsWith 函数用来判断源字W串是否W合一q串的特定词头。它除了包含一?/span> string 参数外,q包含一?/span> subffx 参数Q表C头字W串Q同h String cd。该函数q回一?/span> boolean cd的倹{下面看一个示例?/span>
${fn:startsWith ("ABC", "ab")}<br>
${fn:startsWith ("ABC", "AB")}<br>
前者返回?/span> false ”,后者返回?/span> true ”?/span>
fn:endsWith 函数用来判断源字W串是否W合一q串的特定词。它?/span> fn:startsWith 函数相同Q包?/span> string ?/span> subffx 两个参数Qƈq回一?/span> boolean cd的倹{下面看一个示例?/span>
${fn:endsWith("ABC", "bc")}<br>
${fn:endsWith("ABC", "BC")}<br>
前者返回?/span> false ”,后者返回?/span> true ”?/span>
fn:escapeXml 函数用于所有特D字W{化ؓ字符实体码。它只包含一?/span> string 参数Q返回一?/span> String cd的倹{?/span>
fn:indexOf 函数用于取得子字W串与源字符串匹配的开始位|,若子字符串与源字W串中的内容没有匚w成功返回?/span> -1 ”。它包括 string ?/span> substring 两个参数Q返回结果ؓ int cd。下面看一个示例?/span>
${fn:indexOf("ABCD","aBC")}<br>
${fn:indexOf("ABCD","BC")}<br>
前者由于没有匹配成功,所以返?/span> -1 Q后者匹配成功将q回位置的下标,?/span> 1 ?/span>
fn:join 函数允许Z个字W串数组中的每一个字W串加上分隔W,q连接v来。它的参数、返回结果和描述如表 9.25 所C:
?/span> 9.25 fn:join 函数
参数 |
描述 |
array |
字符串数l。其cd必须?/span> String[] cd |
separator |
分隔W。其cd必须?/span> String cd |
q回l果 |
q回一?/span> String cd的?/span> |
下面看一个示例?/span>
<% String[] stringArray = {"a","b","c"}; %>
<%request.getSession().setAttribute("stringArray", stringArray);%>
${fn:join(sessionScope.stringArray,";")}<br>
定义数组q放|到 Session 中,然后通过 Session 得到该字W串数组Q?/span> fn:join 函数q传入分隔符?/span> ; ”,得到的结果ؓ?/span> a;b;c ”?/span>
fn:replace 函数允许为源字符串做替换的工作。它的参数、返回结果和描述如表 9.26 所C:
?/span> 9.26 fn:replace 函数
参数 |
描述 |
inputString |
源字W串。其cd必须?/span> String cd |
beforeSubstring |
指定被替换字W串。其cd必须?/span> String cd |
afterSubstring |
指定替换字符丌Ӏ其cd必须?/span> String cd |
q回l果 |
q回一?/span> String cd的?/span> |
下面看一个示例?/span>
${fn:replace("ABC","A","B")}<br>
?/span> ABC ”字W串替换为?/span> BBC ”,在?/span> ABC ”字W串中用?/span> B ”替换了?/span> A ”?/span>
fn:split 函数用于一l由分隔W分隔的字符串{换成字符串数l。它的参数、返回结果和描述如表 9.27 所C:
?/span> 9.27 fn:split 函数
参数 |
描述 |
string |
源字W串。其cd必须?/span> String cd |
delimiters |
指定分隔W。其cd必须?/span> String cd |
q回l果 |
q回一?/span> String[] cd的?/span> |
下面看一个示例?/span>
${fn:split("A,B,C",",")}<br>
?/span> A,B,C ”字W串转换为数l?/span> {A,B,C} ?/span>
fn:substring 函数用于截取字符丌Ӏ它的参数、返回结果和描述如表 9.28 所C:
?/span> 9.28 fn:substring 函数
参数 |
描述 |
string |
源字W串。其cd必须?/span> String cd |
beginIndex |
指定起始下标Qg 0 开始)。其cd必须?/span> int cd |
endIndex |
指定l束下标Qg 0 开始)。其cd必须?/span> int cd |
q回l果 |
q回一?/span> String cd的?/span> |
下面看一个示例?/span>
${fn:substring("ABC","1","2")}<br>
fn:substringBefore 函数允许截取源字W从开始到某个字符丌Ӏ它的参数和 fn:substringAfter 函数相同Q不同的?/span> substring 表示的是l束字符丌Ӏ下面看一个示例?/span>
${fn:substringBefore("ABCD","BC")}<br>
截取的结果ؓ?/span> A ”?/span>
fn:toLowerCase 函数允许源字符串中的字W全部{换成写字符。它只有一个表C源字符串的参数 string Q函数返回一?/span> String cd的倹{下面看一个示例?/span>
${fn:toLowerCase("ABCD")}<br>
转换的结果ؓ?/span> abcd ”?/span>
fn:toUpperCase 函数允许源字符串中的字W全部{换成大写字符。它?/span> fn:toLowerCase 函数相同Q也只有一?/span> String 参数Qƈq回一?/span> String cd的倹{下面看一个示例?/span>
${fn:toUpperCase("abcd")}<br>
转换的结果ؓ?/span> ABCD ”?/span>
fn:trim 函数删除源字符串中l尾部分的“空格”以产生一个新的字W串。它?/span> fn:toLowerCase 函数相同Q只有一?/span> String 参数Qƈq回一?/span> String cd的倹{下面看一个示例?/span>
${fn:trim("AB C ")}D<br>
转换的结果ؓ?/span> AB CD ”,注意Q它只删除词尾的空D不是全部,因此?/span> B ”和?/span> C ”之间仍然留有一个空根{?/span>
Database access 标签库中的标{来提供在 JSP 面中可以与数据库进行交互的功能Q虽然它的存在对于早期纯 JSP 开发的应用以及型的开发有着意义重大的A献,但是对于 MVC 模型来说Q它却是q反规范的。因Z数据库交互的工作本n属于业务逻辑层的工作Q所以不应该?/span> JSP 面中出玎ͼ而是应该在模型层中进行?/span>
对于 Database access 标签库本书不作重点介l,只给出几个简单示例让读者略微了解它们的功能?/span>
Database access 标签库有以下 6 l标{来q行工作Q?/span> <sql:setDataSource> ?/span> <sql:query> ?/span> <sql:update> ?/span> <sql:transaction> ?/span> <sql:setDataSource> ?/span> <sql:param> ?/span> <sql:dateParam> ?/span>
<sql:setDataSource> 标签用于讄数据源,下面看一个示例:
<sql:setDataSource
var="dataSrc"
url="jdbc:postgresql://localhost:5432/myDB"
driver="org.postgresql.Driver"
user="admin"
password="1111"/>
该示例定义一个数据源q保存在?/span> dataSrc ”变量内?/span>
<sql:query> 标签用于查询数据库,它标{体内可以是一句查?/span> SQL 。下面看一个示例:
<sql:query var="queryResults" dataSource="${dataSrc}">
select * from table1
</sql:query>
该示例将q回查询的结果到变量?/span> queryResults ”中Q保存的l果?/span> javax.servlet.jsp.jstl.sql.Result cd的实例。要取得l果集中的数据可以?/span> <c:forEach> 循环来进行。下面看一个示例?/span>
<c:forEach var="row" items="${queryResults.rows}">
<tr>
<td>${row.userName}</td>
<td>${row.passWord}</td>
</tr>
</c:forEach>
?/span> rows ”是 javax.servlet.jsp.jstl.sql.Result 实例的变量属性之一Q用来表C数据库表中的“列”集合,循环Ӟ通过?/span> ${row.XXX} ”表辑ּ可以取得每一列的数据Q?/span> XXX ”是表中的列名?/span>
<sql:update> 标签用于更新数据库,它的标签体内可以是一句更新的 SQL 语句。其使用?/span> <sql:query> 标签没有什么不同?/span>
<sql:transaction> 标签用于数据库的事务处理Q在该标{体内可以?/span> <sql:update> 标签?/span> <sql:query> 标签Q?/span> <sql:transaction> 标签的事务管理将作用于它们之上?/span>
<sql:transaction> 标签对于事务处理定义?/span> read_committed ?/span> read_uncommitted ?/span> repeatable_read ?/span> serializable4 个隔ȝ别?/span>
看到 I18N 应该想到知识“国际化”, I18N formatting 标签库就是用于在 JSP 面中做国际化的动作。在该标{ֺ中的标签一共有 12 个,被分Z两类Q分别是Q?/span>
q 国际化核心标{: <fmt:setLocale> ?/span> <fmt:bundle> ?/span> <fmt:setBundle> ?/span> <fmt:message> ?/span> <fmt:param> ?/span> <fmt:requestEncoding> ?/span>
q 格式化标{: <fmt:timeZone> ?/span> <fmt:setTimeZone> ?/span> <fmt:formatNumber> ?/span> <fmt:parseNumber> ?/span> <fmt:formatDate> ?/span> <fmt:parseDate> ?/span>
下面只选择其中常见的一些标{֒属性进行介l?/span>
<fmt:setLocale> 标签用于讄 Locale 环境。它的属性和描述如表 9.17 所C:
?/span> 9.17 <fmt:setLocale> 标签属性和说明
属?/span> |
描述 |
value |
Locale 环境的指定,可以?/span> java.util.Locale ?/span> String cd的实?/span> |
scope |
Locale 环境变量的作用范_可选) |
下面看一个示例:
<fmt:setLocale value="zh_TW"/>
表示讄本地环境为繁体中文?/span>
q两l标{于资源配|文件的l定Q唯一不同的是
<fmt:bundle>
标签资源配|文件绑定于它标{体中的昄Q?/span>
<fmt:setBundle>
标签则允许将资源配置文g保存Z个变量,在之后的
Ҏ Locale 环境的不同将查找不同后缀的资源配|文Ӟq点在国际化的Q何技术上都是一致的Q通常来说Q这两种标签单独使用是没有意义的Q它们都会与 I18N formatting 标签库中的其他标{N合用。它们的属性和描述如表 9.18 所C:
?/span> 9.18 <fmt:bundle> ?/span> <fmt:setBundle> 标签属性和说明
属?/span> |
描述 |
basename |
资源配置文g的指定,只需要指定文件名而无L展名Q二l标{օ有的属?/span> |
var |
<fmt:setBundle> 独有的属性,用于保存资源配置文gZ个变?/span> |
scope |
变量的作用范?/span> |
下面看一个示?/span>
<fmt:setLocale value="zh_CN"/>
<fmt:setBundle basename="applicationMessage" var="applicationBundle"/>
该示例将会查找一个名?/span> applicationMessage_zh_CN.properties 的资源配|文Ӟ来作为显C的 Resource l定?/span>
用于信息昄的标{,显C源配|文件中定义的信息。它的属性和描述如表 9.19 所C:
?/span> 9.19 <fmt:message> 标签属性和说明
属?/span> |
描述 |
key |
资源配置文g的“键”指?/span> |
bundle |
若?/span> <fmt:setBundle> 保存了资源配|文Ӟ该属性就可以从保存的资源配置文g中进行查?/span> |
var |
显CZ息保存ؓ一个变?/span> |
scope |
变量的作用范?/span> |
下面看一个示例:
<fmt:setBundle basename="applicationMessage" var="applicationBundle"/>
<fmt:bundle basename="applicationAllMessage">
<fmt:message key="userName" />
<p>
<fmt:message key="passWord" bundle="${applicationBundle}" />
</fmt:bundle>
该示例用了两种资源配置文g的绑定的做法Q?/span> applicationMessage ”资源配|文件利?/span> <fmt:setBundle> 标签被赋于了变量?/span> applicationBundle ”,而作?/span> <fmt:bundle> 标签定义的?/span> applicationAllMessage ”资源配|文件作用于其标{体内的昄?/span>
q W一?/span> <fmt:message> 标签用?/span> applicationAllMessage ”资源配|文件中“键”ؓ?/span> userName ”的信息昄?/span>
q W二?/span> <fmt:message> 标签虽然被定义在 <fmt:bundle> 标签体内Q但是它使用?/span> bundle 属性,因此指定之前由 <fmt:setBundle> 标签保存的?/span> applicationMessage ”资源配|文Ӟ该“键”ؓ?/span> passWord ”的信息昄?/span>
<fmt:param> 标签应该位于 <fmt:message> 标签内,ؓ该消息标{提供参数倹{它只有一个属?/span> value ?/span>
<fmt:param> 标签有两U用版本,一U是直接参数值写?/span> value 属性中Q另一U是参数值写在标{体内?/span>
<fmt:requestEncoding> 标签用于求设|字W编码。它只有一个属?/span> value Q在该属性中可以定义字符~码?/span>
q两l标{N用于讑֮一个时区。唯一不同的是 <fmt:timeZone> 标签得在其标{体内的工作可以使用该时|, <fmt:setBundle> 标签则允许将时区讄保存Z个变量,在之后的工作可以Ҏ该变量来q行。它们的属性和描述如表 9.20 所C:
?/span> 9.20 <fmt:timeZone> ?/span> <fmt:setTimeZone> 标签 属性和说明
属?/span> |
描述 |
value |
时区的设|?/span> |
var |
<fmt:setTimeZone> 独有的属性,用于保存时区Z个变?/span> |
scope |
变量的作用范?/span> |
<fmt: formatNumber > ?/span> {于格式化数字。它的属性和描述如表 9.21 所C:
?/span> 9.21 <fmt:formatNumber> 标签属性和说明
属?/span> |
描述 |
value |
格式化的数字Q该数值可以是 String cd?/span> java.lang.Number cd的实?/span> |
type |
格式化的cd |
pattern |
格式化模?/span> |
var |
l果保存变量 |
scope |
变量的作用范?/span> |
maxIntegerDigits |
指定格式化结果的最大?/span> |
minIntegerDigits |
指定格式化结果的最?/span> |
maxFractionDigits |
指定格式化结果的最大|带小?/span> |
minFractionDigits |
指定格式化结果的最|带小?/span> |
<fmt:formatNumber> 标签实际是对?/span> java.util.NumberFormat c, type 属性的可能值包?/span> currency Q货币)?/span> number Q数字)?/span> percent Q百分比Q?/span>
下面看一个示例?/span>
<fmt:formatNumber value="1000.888" type="currency" var="money"/>
<fmt:parseNumber> 标签用于解析一个数字,q将l果作ؓ java.lang.Number cȝ实例q回?/span> <fmt:parseNumber> 标签看v来和 <fmt:formatNumber> 标签的作用正好相反。它的属性和描述如表 9.22 所C:
?/span> 9.22 <fmt:parseNumber> 标签属性和说明
属?/span> |
描述 |
value |
被解析的字W串 |
type |
解析格式化的cd |
pattern |
解析格式化模?/span> |
var |
l果保存变量Q类型ؓ java.lang.Number |
scope |
变量的作用范?/span> |
parseLocale |
以本地化的Ş式来解析字符Ԍ该属性的内容应ؓ String ?/span> java.util.Locale cd的实?/span> |
下面看一个示例?/span>
<fmt:parseNumber value="15%" type="percent" var="num"/>
解析之后的结果ؓ?/span> 0.15 ”?/span>
<fmt:formatDate> 标签用于格式化日期。它的属性和描述如表 9.23 所C:
?/span> 9.23 <fmt:formatDate> 标签属性和说明
属?/span> |
描述 |
value |
格式化的日期Q该属性的内容应该?/span> java.util.Date cd的实?/span> |
type |
格式化的cd |
pattern |
格式化模?/span> |
var |
l果保存变量 |
scope |
变量的作用范?/span> |
timeZone |
指定格式化日期的时区 |
<fmt:formatDate> 标签?/span> <fmt:timeZone> ?/span> <fmt:setTimeZone> 两组标签的关pd切。若没有指定 timeZone属性, 也可以通过 <fmt:timeZone> ?/span> <fmt:setTimeZone> 两组标签讑֮的时区来格式化最后的l果?/span>
<fmt:parseDate> 标签用于解析一个日期,q将l果作ؓ java.lang.Date cd的实例返回?/span> <fmt:parseDate> 标签看v来和 <fmt:formatDate> 标签的作用正好相反。它的属性和描述如表 9.24 所C:
?/span> 9.24 <fmt:parseDate> 标签属性和说明
属?/span> |
描述 |
value |
被解析的字W串 |
type |
解析格式化的cd |
pattern |
解析格式化模?/span> |
var |
l果保存变量Q类型ؓ java.lang.Date |
scope |
变量的作用范?/span> |
parseLocale |
以本地化的Ş式来解析字符Ԍ该属性的内容?/span> String ?/span> java.util.Locale cd的实?/span> |
timeZone |
指定解析格式化日期的时区 |
<fmt:parseNumber> ?/span> <fmt:parseDate> 两组标签都实现解析字W串Z个具体对象实例的工作Q因此,q两l解析标{֯ var 属性的字符串参数要求非怸根{就 JSP 面的表C层前段来说Q处理这U解析本不属于䆾内之事,因此 <fmt:parseNumber> ?/span> <fmt:parseDate> 两组标签应该量用Q替代工作的地方应该在服务器端表C层的后D,比如?/span> Servlet 中?/span>