1.<c:out value="${ buttons}" escapeXml="false" />
2.JSTLåELçåºå«
3.如何查看JSTL源代码压缩包中自带的包源TLD文件
4.JSTL详细介绍
5.关于JSP中JSTL标签库的问题!!码j码下!包源
<c:out value="${ buttons}" escapeXml="false" />
è¿æ¯JSTLæ ç¾çç¨æ³
JSTLç®ä»
JSTLæ¯ä¸ä¸ªä¸æå®åçå¼æ¾æºä»£ç çJSPæ ç¾åºï¼æ¯ç±apacheçjakartaå°ç»æ¥ç»´æ¤çãJSTLåªè½è¿è¡å¨æ¯æJSP1.2åServlet2.3è§èç容å¨ä¸ï¼å¦tomcat 4.xãä½æ¯å¨å³å°æ¨åºçJSP 2.0ä¸æ¯ä½ä¸ºæ åæ¯æçã
JSTLç®åçææ°çæ¬ä¸º1.ï¼æç»åå¸ç为1.0ãJSTLå å«ä¸¤ä¸ªé¨åï¼æ ç¾åºåELï¼Expression Language表达å¼è¯è¨ï¼è¯è¨ãæ ç¾åºç®åæ¯æåç§æ ç¾ï¼
æ ç¾ URIå ç¼ ç¤ºä¾
Core /jstl/core c <c:tagname ...> XML processing /jstl/xml x <x:tagname ...> IN capable formatting /jstl/fmt fmt <fmt:tagname ...> Database access (SQL) /jstl/sql sql <sql:tagname ...>
Coreæ¯æJSPä¸çä¸äºåºæ¬çæä½ï¼
XML processingæ¯æXMLææ¡£çå¤çï¼
IN capable formattingæ¯æ对JSP页é¢çå½é åï¼
Database access (SQL)æ¯æJSP对æ°æ®åºçæä½ã
ç±äºæ¬äººæ°´å¹³æéï¼æ¬æä» ä»ç»Coreæ ç¾ï¼å¦æå ´è¶£ï¼å¯ä¸èµ·æ¢è®¨å ¶å®ä¸ç§æ ç¾ç使ç¨ä¸æ©å ã
ELè¯è¨ä»ç»
ELè¯è¨æ¯JSTLè¾åºï¼è¾å ¥ï¼ä¸ä¸ªJAVA表达å¼ç表示形å¼ã
å¨JSTLä¸ï¼ELè¯è¨åªè½å¨å±æ§å¼ä¸ä½¿ç¨ãELè¯è¨åªè½éè¿å»ºç«è¡¨è¾¾å¼æ¥è¿è¡è°ç¨ãå¨å±æ§å¼ä¸ä½¿ç¨è¡¨è¾¾å¼æä¸ç§æ¹å¼ã
1ã valueå±æ§å å«ä¸ä¸ªè¡¨è¾¾å¼
<some:tag value=""/>
å¨è¿ç§æ åµä¸ï¼è¡¨è¾¾å¼å¼è¢«è®¡ç®åºæ¥å¹¶æ ¹æ®ç±»å转æ¢è§åèµå¼ç»valueå±æ§ãæ¯å¦ï¼<c:out value="" />ä¸çå°±æ¯ä¸ä¸ªELï¼å®ç¸å½äºJSPè¯å¥<%=request.getAttribute(âusernameâ)%>æ<% =session.getAttribute(âusernameâ)%>
2ã valueå±æ§å å«ä¸ä¸ªæå¤ä¸ªå±æ§ï¼è¿äºå±æ§è¢«ææ¬åå²æå´ç»
<some:tag value="sometext"/>
å¨è¿ç§æ åµä¸ï¼è¡¨è¾¾å¼ä»å·¦å°å³è¿è¡è®¡ç®ï¼å¹¶å°ç»æ转æ¢ä¸ºå符串åï¼æ ¹æ®ç±»å转æ¢è§åï¼ï¼å¹¶å°ç»æèµå¼ç»valueå±æ§
3ã valueå±æ§ä» ä» å å«ææ¬
<some:tag value="sometext"/>
å¨è¿ç§æ åµä¸ï¼å符串åå±æ§valueå°æ ¹æ®ç±»å转æ¢è§å转æ¢ä¸ºæ ç¾æå¸æçç±»åã
ELè¯è¨çæä½ç¬¦
åå¾æ个对象æéåä¸çå±æ§å¼
为äºè·å¾éåä¸çå±æ§ï¼ELæ¯æ以ä¸ä¸¤ç§æä½
1ï¼ä½¿ç¨.æä½ç¬¦æ¥è·å¾æååçå±æ§ãä¾å¦è¡¨è¾¾å¼è¡¨æ对象userçusernameå±æ§
2ï¼ ä½¿ç¨[]æä½ç¬¦æ¥è·å¾æååæææ°åæåçå±æ§ã
表达å¼å表达å¼å«ä¹ç¸å
è¡¨è¾¾å¼ è¡¨ærowéåç第ä¸ä¸ªæ¡ç®ã
å¨è¿éuseræ¯ä¸ä¸ªç±»ç对象ï¼å®çå±æ§usernameå¿ é¡»ç¬¦åæ åJavaBeançè§èï¼å³å¿ 须为usernameå±æ§å®ä¹ç¸åºçgetterãsetteræ¹æ³ã
Emptyæä½ç¬¦(空å¼æ£æ¥)
使ç¨emptyæä½ç¬¦æ¥å³å®å¯¹è±¡ãéåæå符串åéæ¯å¦ä¸ºç©ºænullãä¾å¦ï¼
true
å¦ærequestçåæ°å表ä¸çusernameå¼ä¸ºnullï¼å表达å¼çå¼ä¸ºtrueã ELä¹å¯ä»¥ç´æ¥ä½¿ç¨æ¯è¾æä½ç¬¦ä¸nullè¿è¡æ¯è¾ãå¦trueã
æ¯è¾æä½ç¬¦ æä½ç¬¦ æè¿°
==æeq ç¸çæ£æ¥
!=æne ä¸çæ£æ¥
<ælt å°äºæ£æ¥
>ægt 大äºæ£æ¥
<=æle å°äºçäºæ£æ¥
>=æge 大äºçäºæ£æ¥
æ°åè¿ç®ç¬¦ä¸é»è¾è¿ç®ç¬¦åä¸JAVAè¯è¨ç¸åï¼ä¸åå表ã
Coreæ ç¾åº
1ã éç¨æ ç¾
<c:out>
<c:out>æ ç¾ç¨äºå¨JSPä¸æ¾ç¤ºæ°æ®ï¼å®æå¦ä¸å±æ§ å± æ§ æ è¿°æ¯å¦å¿ é¡» 缺çå¼
value è¾åºçä¿¡æ¯ï¼å¯ä»¥æ¯EL表达å¼æ常é æ¯ æ
default value为空æ¶æ¾ç¤ºä¿¡æ¯ å¦ æ
escapeXml 为trueåé¿å¼ç¹æ®çxmlå符é å¦ true
ä¾å: æ¨çç¨æ·åæ¯: <c:out value=ââ default=âguestâ/>
æ¾ç¤ºç¨æ·çç¨æ·åï¼å¦ä¸ºç©ºåæ¾ç¤ºguest
<c:out value=""/>
æå®ä»sessionä¸è·åusernameçå¼æ¾ç¤ºï¼
<c:out value="" />
æ¾ç¤ºusernameçå¼ï¼é»è®¤æ¯ä»request(page)ä¸åï¼å¦ærequestä¸æ²¡æå为usernameç对象åä»sessionä¸åï¼ sessionä¸æ²¡æåä»application(servletContext)ä¸åï¼å¦æ没æåå°ä»»ä½å¼åä¸æ¾ç¤ºã
<c:set>
<c:set>æ ç¾ç¨äºä¿åæ°æ®ï¼å®æå¦ä¸å±æ§ å± æ§ æ è¿° æ¯å¦å¿ 须缺çå¼
value è¦ä¿åçä¿¡æ¯ï¼å¯ä»¥æ¯EL表达å¼æ常é å¦
target éè¦ä¿®æ¹å±æ§çåéåï¼ä¸è¬ä¸ºjavabeançå®ä¾ å¦ æ
property éè¦ä¿®æ¹çjavabeanå±æ§ å¦ æ
var éè¦ä¿åä¿¡æ¯çåé å¦ æ
scope ä¿åä¿¡æ¯çåéçèå´ å¦ page
å¦ææå®äºtargetå±æ§,码j码下 é£ä¹propertyå±æ§ä¹å¿ é¡»æå®ã
ä¾åï¼ <c:set value="" var="test2" scope=âsessionâ />
å°test.testinfoçå¼ä¿åå°sessionçtest2ä¸ï¼å ¶ä¸testæ¯ä¸ä¸ªjavabeançå®ä¾ï¼testinfoæ¯test对象çå±æ§ã
<c:set target="" property="city" value=""/>
å°å¯¹è±¡cust.addressçcityå±æ§å¼ä¿åå°åécityä¸
<c:remove>
<c:remove>æ ç¾ç¨äºå é¤æ°æ®ï¼å®æå¦ä¸å±æ§ å± æ§ æ è¿° æ¯å¦å¿ 须缺çå¼
var è¦å é¤çåé æ¯ æ
scope 被å é¤åéçèå´ å¦ææèå´ï¼å æ¬pageãrequestãsessionãapplicationç
ä¾å: <c:remove var="test2" scope="session"/>
ä»sessionä¸å é¤test2åéã
2ã æµæ§å¶æ ç¾
<c:if>
<c:if>æ ç¾æå¦ä¸å±æ§ å± æ§ æ è¿° æ¯å¦å¿ é¡» 缺çå¼
test éè¦è¯ä»·çæ¡ä»¶ï¼ç¸å½äºif (...){ }è¯å¥ä¸çæ¡ä»¶ æ¯ æ
var è¦æ±ä¿åæ¡ä»¶ç»æçåéå å¦ æ
scope ä¿åæ¡ä»¶ç»æçåéèå´ å¦ page
<c:choose>
è¿ä¸ªæ ç¾ä¸æ¥åä»»ä½å±æ§
<c:when>
<c:when>æ ç¾æ以ä¸å±æ§ å± æ§ æ è¿° æ¯å¦å¿ é¡» 缺çå¼
test éè¦è¯ä»·çæ¡ä»¶ æ¯ æ
<c:otherwise>
è¿ä¸ªæ ç¾åæ ·ä¸æ¥åä»»ä½å±æ§
ä¾åï¼ <c:if test="">
user.wealthy is true.
</c:if>
å¦æuser.wealthyå¼trueï¼åæ¾ç¤ºuser.wealthy is true.
<c:choose>
<c:when test="">
user.generous is true.
</c:when>
<c:when test="">
user.stingy is true.
</c:when>
<c:otherwise>
user.generous and user.stingy are false.
</c:otherwise>
</c:choose>
åªæå½æ¡ä»¶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 { â¦}çæ¡ä»¶è¯å¥ï¼æ以è¿ç§å½¢å¼çè¯å¥åªè½ç¨<c:choose>ã<c:when>å<c:otherwise>æ ç¾å ±åæ¥å®æäºã
3ã 循ç¯æ§å¶æ ç¾
<c:forEach>
<c:forEach>æ ç¾ç¨äºéç¨æ°æ®ï¼å®æ以ä¸å±æ§ å± æ§ æ è¿°æ¯å¦å¿ é¡» 缺çå¼
items è¿è¡å¾ªç¯çé¡¹ç® å¦ æ
begin å¼å§æ¡ä»¶ å¦ 0
end ç»ææ¡ä»¶ å¦ éåä¸çæåä¸ä¸ªé¡¹ç®
step æ¥é¿ å¦ 1
var 代表å½å项ç®çåéå å¦ æ
varStatus æ¾ç¤ºå¾ªç¯ç¶æçåé å¦ æ
ä¾åï¼ <c:forEach items="" var="vector">
<c:out value=""/>
</c:forEach>
ç¸å½äºjavaè¯å¥ for (int i=0;i<vectors.size();i++) {
out.println(vectors.get(i));
}
å¨è¿évectorsæ¯ä¸ä¸ªjava.util.Vector对象ï¼éé¢åæ¾çæ¯Stringæ°æ®ï¼vectoræ¯å½å循ç¯æ¡ä»¶ä¸String对象ãå®é ä¸è¿éçvectorså¯ä»¥æ¯ä»»ä½å®ç°äºjava.util. Collectionæ¥å£ç对象ã
<c:forEach begin="0" end="" var="i" step="1">
count=<c:out value=""/><br>
</c:forEach>
è¾åº:
count=0
count=
<c:forTokens>
<c:forTokens>æ ç¾æ以ä¸å±æ§ å± æ§ æ è¿° æ¯å¦å¿ é¡» 缺çå¼
items è¿è¡å¾ªç¯çé¡¹ç® æ¯ æ
delims åå²ç¬¦ æ¯ æ
begin å¼å§æ¡ä»¶ å¦ 0
end ç»ææ¡ä»¶ å¦ éåä¸çæåä¸ä¸ªé¡¹ç®
step æ¥é¿ å¦ 1
var 代表å½å项ç®çåéå å¦ æ
varStatus æ¾ç¤ºå¾ªç¯ç¶æçåé å¦ æ
ä¾å
<c:forTokens items="a:b:c:d" delims=":" var="token">
<c:out value=""/>
</c:forTokens>
è¿ä¸ªæ ç¾ç使ç¨ç¸å½äºjava.util.StringTokenizerç±»ãå¨è¿éå°å符串a:b:c:d以ï¼åå¼å¾ªç¯å次ï¼tokenæ¯å¾ªç¯å°å½ååå²å°çå符串ã
4.å¯¼å ¥æ件åURL
JSTLæ ¸å¿æ ç¾åºæ¯æ使ç¨<c:import>æ¥å å«æ件ï¼ä½¿ç¨<c:url>æ¥æå°åæ ¼å¼åURL,使ç¨<c:redirect>æ¥éå®åURLã
<c:import>
<c:import>æ ç¾å å«å¦å¤ä¸ä¸ªé¡µé¢ä»£ç å°å½å页ï¼å®æ以ä¸å±æ§ å±æ§ æ è¿° æ¯å¦å¿ é¡» 缺çå¼
url éè¦å¯¼å ¥é¡µé¢çurl æ¯ æ
context /åè·æ¬å°webåºç¨ç¨åºçåå å¦ å½ååºç¨ç¨åº
charEncoding ç¨äºå¯¼å ¥æ°æ®çå符é å¦ ISO--1
var æ¥åå¯¼å ¥ææ¬çåéå å¦ page
scope æ¥åå¯¼å ¥ææ¬çåéçåéèå´ å¦ 1
varReader ç¨äºæ¥åå¯¼å ¥ææ¬çjava.io.Readeråéå å¦ æ
varStatus æ¾ç¤ºå¾ªç¯ç¶æçåé å¦ æ
<c:url>
<c:url>æ ç¾è¾åºä¸ä¸ªurlå°åï¼å®æ以ä¸å±æ§ å± æ§ æ è¿° æ¯å¦å¿ 须缺çå¼
url urlå°å æ¯ æ
context /åè·æ¬å°webåºç¨ç¨åºçåå å¦ å½ååºç¨ç¨åº
charEncoding ç¨äºå¯¼å ¥æ°æ®çå符é å¦ ISO--1
var æ¥åå¤çè¿çurlåéåï¼è¯¥åéåå¨url å¦ è¾åºå°é¡µ
scope åå¨urlçåéåçåéèå´ å¦ page
ä¾åï¼
<c:import url="/edit.js" var="newsfeed"/>
å°url /edit.jså å«å°å½å页çå½åä½ç½®ï¼å¹¶å°urlä¿åå°newsfeedåéä¸
<a href="<c:url url="/index.jsp"/>"/>
å¨å½å页çå½åä½ç½®è¾åº<a href="/index.jsp"/>ï¼æ¯å½å页çæå¨çä½ç½®ã
<c:redirect>
<c:redirect>æ ç¾å°è¯·æ±éæ°å®åå°å¦å¤ä¸ä¸ªé¡µé¢ï¼å®æ以ä¸å±æ§ å±æ§ æ è¿° æ¯å¦å¿ é¡» 缺çå¼
url urlå°å æ¯ æ
context /åè·æ¬å°webåºç¨ç¨åºçåå å¦ å½ååºç¨ç¨åº
ä¾åï¼
<c:redirect url="/login.jsp"/>
å°è¯·æ±éæ°å®åå°/login.jsp页ï¼ç¸å½äºresponse.setRedirect("/login.jsp");
<c:param>
<c:param>æ ç¾ç¨æ¥ä¼ éåæ°ç»ä¸ä¸ªéå®åæå å«é¡µé¢ï¼å®æ以ä¸å±æ§å± æ§ æ è¿° æ¯å¦å¿ é¡» 缺çå¼
name å¨requeståæ°ä¸è®¾ç½®çåéå æ¯ æ
value å¨requeståæ°ä¸è®¾ç½®çåéå¼ å¦ æ
ä¾åï¼
<c:redirect url="login.jsp">
<c:param name="id" value=""/>
</c:redirect>
å°åæ°ä»¥id为ååä¼ éå°login.jsp页é¢ï¼ç¸å½äºlogin.jsp?id=
JSTLçä¼ç¹
1ãå¨åºç¨ç¨åºæå¡å¨ä¹é´æä¾äºä¸è´çæ¥å£ï¼æ大ç¨åºå°æé«äºWEBåºç¨å¨ååºç¨æå¡å¨ä¹é´ç移æ¤ã
2ã ç®åäºJSPåWEBåºç¨ç¨åºçå¼åã
3ã以ä¸ç§ç»ä¸çæ¹å¼åå°äºJSPä¸çscriptlet代ç æ°éï¼å¯ä»¥è¾¾å°æ²¡æä»»ä½scriptlet代ç çç¨åºãå¨æä»¬å ¬å¸ç项ç®ä¸æ¯ä¸å 许æä»»ä½çscriptlet代ç åºç°å¨JSPä¸ã
4ãå 许JSPè®¾è®¡å·¥å ·ä¸WEBåºç¨ç¨åºå¼åçè¿ä¸æ¥éæãç¸ä¿¡ä¸ä¹ å°±ä¼ææ¯æJSTLçIDEå¼åå·¥å ·åºç°ã
æ»ç»
ä¸é¢ä»ç»çä» ä» æ¯JSTLçä¸é¨åï¼å¦æè¦ä½¿ç¨JSTLï¼åå¿ é¡»å°jstl.jarå standard.jaræ件æ¾å°classpathä¸ï¼å¦æä½ è¿éè¦ä½¿ç¨XML processingåDatabase access (SQL)æ ç¾ï¼è¿è¦å°ç¸å ³JARæ件æ¾å°classpathä¸ï¼è¿äºJARæä»¶å ¨é¨åå¨äºä¸è½½åæ¥çzipæ件ä¸ãè¿ä¸ªzipæ件å¯ä»¥ä»/products/jsp/jstl/
sunå ¬å¸çJSTLç«ç¹
2ã /bayern/appendixA.pdf
JSTLçåèææ¡£ï¼æ¬æå¾å¤å 容é½æ¯ä»è¿ä¸ªPDFæ件éç¿»è¯çã
4ã ï¼ï¼J2EEç¼ç¨æåï¼1.3çï¼ï¼ï¼
ä»ç»äºJSTLçéå½¢ï¼wroxç书é½æ¯ç²¾åã
JSTLåELçåºå«
JSTLæ¯ä¸ä¸ªä¸æå®åçå¼æ¾æºä»£ç ï¼ELåªæ¯ä¸ä¸ªè¡¨è¾¾å¼ã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容å¨ç¼è¯è¯¥é¡µé¢æ¶ï¼è¦ä½¿æ产ççé误信æ¯ææä¹å¯è½ä¼å¾å°é¾ã
ELç®ä»ï¼
ELï¼Expression Languageï¼ æ¯ä¸ºäºä½¿JSPåèµ·æ¥æ´å ç®åã表达å¼è¯è¨ççµææ¥èªäº ECMAScript å XPath 表达å¼è¯è¨ï¼å®æä¾äºå¨ JSP ä¸ç®å表达å¼çæ¹æ³ï¼è®©Jspç代ç æ´å ç®åã
注æå½è¡¨è¾¾å¼æ ¹æ®å称å¼ç¨è¿äºå¯¹è±¡ä¹ä¸æ¶ï¼è¿åçæ¯ç¸åºç对象èä¸æ¯ç¸åºçå±æ§ãä¾å¦ï¼å³ä½¿ç°æç pageContext å±æ§å å«æäºå ¶ä»å¼ï¼${ pageContext} ä¹è¿å PageContext 对象ã
注æ <%@ page isELIgnored="true" %> 表示æ¯å¦ç¦ç¨ELè¯è¨,TRUE表示ç¦æ¢.FALSE表示ä¸ç¦æ¢.JSP2.0ä¸é»è®¤çå¯ç¨ELè¯è¨ã
如何查看JSTL源代码压缩包中自带的TLD文件
学习JSTL标准标签时,可借助源代码自带的包源TLD文件(tag library descriptor,标签库描述文件)辅助学习,码j码下石器时代源码分析既可以查看这些标准标签是包源如何定义、如何描述的码j码下,也有利于养成良好的包源编码习惯。
目前JSTL的码j码下最新版本为1.2.5版,在官网下载好源代码压缩包后,包源拷贝到一个文件夹下,码j码下如F盘的包源test文件夹下。
在搜索框直接查找*.tld,码j码下如果没勾选在压缩包中搜索,包源将显示不出结果,如图1所示。此时需要在搜索-高级选项下勾选压缩的文件夹,如图2所示
勾选后,地板网站源码即可正常显示搜索到的结果。
要手动追踪某个tld文件的位置,也可以选中该文件后右键选择打开文件所在位置,查看文件路径。本例中路径为:F:\test\taglibs-standard-1.2.5-source-release.zip\taglibs-standard-1.2.5\impl\src\main\resources\META-INF
后面的步骤就简单了,解压对应的TLD文件,用Eclipse等软件打开。
JSTL详细介绍
JSTL(JavaServer Pages Standard Tag Library)是JSP 1.2中引入的一个定制标记库集合,它为Web应用程序提供了许多通用功能,封包助手源码如迭代、条件判断、数据格式化、XML操作和数据库访问。它旨在简化开发过程,减少对脚本编制元素(如scriptlet)的依赖,从而降低维护成本。 在早期的JSP中,开发人员常常使用scriptlet实现页面逻辑,交换链源码例如条件内容,如清单1所示。这种做法增加了页面的复杂性和维护难度,因为错误的嵌套可能导致问题难以定位。JSTL通过标准标记库(如core、format、xml和sql)提供了这些功能,使开发者能专注于应用特定需求,而无需自定义编写复杂脚本。小恐龙源码 JSTL 1.0于年发布,包括四个核心标记库和两个验证器,支持数据管理、格式化、XML操作和SQL查询。ScriptFreeTLV和PermittedTaglibsTLV验证器允许开发者设置编码标准和标记库使用权限。尽管JSTL已成为J2EE平台的一部分,但在当时并非所有应用服务器都支持它。 从JSTL 1.1开始,随着JSP 2.0的引入,EL(Expression Language)表达式变得可用,使得在JSP页面上直接使用表达式更方便。例如,操作的值属性可以使用EL表达式动态设置,如清单2所示。然而,EL表达式的维护问题依然存在,于是JSTL引入了更简洁的EL语言,它基于EcmaScript和XPath,提供了一种更直观的方式来操作JSP容器中的数据,如清单3所示。 JSTL还扩展了作用域变量的管理,使得EL表达式可以直接引用存储在页面、请求、会话和应用程序作用域中的对象,如清单4所示。通过这些改进,JSTL极大地提高了开发效率和代码的可维护性。扩展资料
JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也是作为标准支持的。关于JSP中JSTL标签库的问题!!!
<%@ page taglib prefix="c" uri="/jsp/jstl/core"%> 这个不是这么写的,应该是:
<%@ taglib prefix="c" uri="/jsp/jstl/core"%>