jspèªå®ä¹æ ç¾
ä¸ãåºæ¬æ¦å¿µ
1ãæ ç¾(Tag)
æ ç¾æ¯ä¸ç§XMLå ç´ ï¼éè¿æ ç¾å¯ä»¥ä½¿JSPç½é¡µåå¾ç®æ´å¹¶ä¸æäºç»´æ¤ï¼è¿å¯ä»¥æ¹ä¾¿å°å®ç°åä¸ä¸ªJSPæ件æ¯æå¤ç§è¯è¨çæ¬ãç±äºæ ç¾æ¯XMLå ç´ ï¼æ以å®çå称åå±æ§é½æ¯å¤§å°åææçã
2ãæ ç¾åº(Tag library)
ç±ä¸ç³»ååè½ç¸ä¼¼ãé»è¾ä¸äºç¸èç³»çæ ç¾ææçéå称为æ ç¾åºã
3ãæ ç¾åºæè¿°æ件(Tag Library Descriptor)
æ ç¾åºæè¿°æ件æ¯ä¸ä¸ªXMLæ件ï¼è¿ä¸ªæ件æä¾äºæ ç¾åºä¸ç±»åJSPä¸å¯¹æ ç¾å¼ç¨çæ å°å ³ç³»ãå®æ¯ä¸ä¸ªé ç½®æ件ï¼åweb.xmlæ¯ç±»ä¼¼çã
4ãæ ç¾å¤çç±»(Tag Handle Class)
æ ç¾å¤çç±»æ¯ä¸ä¸ªJavaç±»ï¼è¿ä¸ªç±»ç»§æ¿äºTagSupportæè æ©å±äºSimpleTagæ¥å£ï¼éè¿è¿ä¸ªç±»å¯ä»¥å®ç°èªå®ä¹JSPæ ç¾çå ·ä½åè½ã
äºãèªå®ä¹JSPæ ç¾çæ ¼å¼
1ã为äºä½¿å°JSP容å¨è½å¤ä½¿ç¨æ ç¾åºä¸çèªå®ä¹è¡ä¸ºï¼å¿ 须满足以ä¸ä¸¤ä¸ªæ¡ä»¶ï¼
<% @ taglib prefix=âsomeprefixâãuri=â/sometaglibâ %> |
1)ä»ä¸ä¸ªæå®çæ ç¾åºä¸è¯å«åºä»£è¡¨è¿ç§èªå®ä¹è¡ä¸ºçæ ç¾ï¼
2)æ¾å°å®ç°è¿äºèªå®ä¹è¡ä¸ºçå
·ä½ç±»ã
第ä¸ä¸ªå¿ éæ¡ä»¶ï¼æ¾åºä¸ä¸ªèªå®ä¹è¡ä¸ºå±äºé£ä¸ªæ ç¾åºï¼æ¯ç±æ ç¾æ令çåç¼(Taglib Directive's Prefix)å±æ§å®æï¼æ以å¨åä¸ä¸ªé¡µé¢ä¸ä½¿ç¨ç¸ååç¼çå ç´ é½å±äºè¿ä¸ªæ ç¾åºãæ¯ä¸ªæ ç¾åºé½å®ä¹äºä¸ä¸ªé»è®¤çåç¼ï¼ç¨å¨æ ç¾åºçææ¡£ä¸æè 页é¢ä¸æå ¥ èªå®ä¹æ ç¾ãæ以ï¼ä½ å¯ä»¥ä½¿ç¨é¤äºè¯¸å¦jsp,jspx,java,servlet,sun,sunw(å®ä»¬é½æ¯å¨JSPç½ç®ä¹¦ä¸æå®çä¿çå)ä¹ç±»çå ç¼ã ã
uriå±æ§æ»¡è¶³äºä»¥ä¸ç第äºä¸ªè¦æ±ã为æ¯ä¸ªèªå®ä¹è¡ä¸ºæ¾å°å¯¹åºçç±»ãè¿ä¸ªuriå å«äºä¸ä¸ªå符串ï¼å®¹å¨ç¨å®æ¥å®ä½TLDæ件ãå¨TLDæ件ä¸å¯ä»¥æ¾å°æ ç¾åºä¸æææ ç¾å¤çç±»çå称ã
2ãå½webåºç¨ç¨åºå¯å¨æ¶ï¼å®¹å¨ä»WEB-INFæ件夹çç®å½ç»æçMETA-INFæç´¢ææ以.tldç»å°¾çæ件ãä¹å°±æ¯è¯´å®ä»¬ä¼å®ä½ææçTLDæ件ã对äºæ¯ä¸ªTLDæ件ï¼å®¹å¨ä¼å è·åæ ç¾åºçURIï¼ç¶å为æ¯ä¸ªTLDæ件å对åºçURIå建æ å°å ³ç³»ã
å¨JSP页é¢ä¸ï¼æä»¬ä» ééè¿ä½¿ç¨å¸¦æURIå±æ§å¼çæ ç¾åºæ令æ¥åå ·ä½çæ ç¾åºå¹é ã
ä¸ãèªå®ä¹JSPæ ç¾çå¤çè¿ç¨
1ãå¨JSPä¸å¼å ¥æ ç¾åº
<% @ taglib prefix=âtaglibprefixâ uri=âtagliburiâ %> |
2ãå¨JSPä¸ä½¿ç¨æ ç¾åºæ ç¾
3ãWeb容å¨æ ¹æ®ç¬¬äºä¸ªæ¥éª¤ä¸çprefixï¼è·å¾ç¬¬ä¸ä¸ªæ¥éª¤ä¸å£°æçtaglibçuriå±æ§å¼
4ãWeb容å¨æ ¹æ®uriå±æ§å¨web.xmlæ¾å°å¯¹åºçå ç´ 5ï¼ä»å ç´ ä¸è·å¾å¯¹åºçå ç´ çå¼ 6ï¼Web容å¨æ ¹æ®å ç´ çå¼ä»WEB-INF/ç®å½ä¸æ¾å°å¯¹åºç.tldæ件 7ï¼ä».tldæ件ä¸æ¾å°ä¸tagname对åºçå ç´ 8ï¼åå ç´ ä¸è·å¾å¯¹åºçå ç´ çå¼ 9ï¼Web容å¨æ ¹æ®å ç´ çå¼å建ç¸åºçtag handle classçå®ä¾ 10. Web容å¨è°ç¨è¿ä¸ªå®ä¾çdoStartTag/doEndTagæ¹æ³å®æç¸åºçå¤çã
åãå建å使ç¨ä¸ä¸ªTag Libraryçåºæ¬æ¥éª¤
1ãå建æ ç¾çå¤çç±»(Tag Handler Class)
2ãå建æ ç¾åºæè¿°æ件(Tag Library Descrptor File)
3ãå¨web.xmlæ件ä¸é ç½®å ç´ 4.å¨JSPæ件ä¸å¼äººæ ç¾åº
äºãTagSupportç±»ç®ä»
1ãå¤çæ ç¾çç±»å¿ é¡»æ©å±javax.servlet.jsp.TagSupportã
2ãTagSupportç±»ç主è¦å±æ§ï¼
A.parentå±æ§ï¼ä»£è¡¨åµå¥äºå½åæ ç¾çä¸å±æ ç¾çå¤çç±»ï¼
B.pageContexå±æ§ï¼ä»£è¡¨Webåºç¨ä¸çjavax.servlet.jsp.PageContext对象ï¼
3ãJSP容å¨å¨è°ç¨doStartTagæè doEndTagæ¹æ³åï¼ä¼å è°ç¨setPageContextåsetParentæ¹æ³ï¼è®¾ç½®pageContextåparentãå æ¤å¨æ ç¾å¤çç±»ä¸å¯ä»¥ç´æ¥è®¿é®pageContextåéï¼
4ãå¨TagSupportçæé æ¹æ³ä¸ä¸è½è®¿é®pageContextæååéï¼å 为æ¤æ¶JSP容å¨è¿æ²¡æè°ç¨setPageContextæ¹æ³å¯¹pageContextè¿è¡åå§åã
#p#
å ãTagSupportå¤çæ ç¾çæ¹æ³
1ãTagSupportç±»æä¾äºä¸¤ä¸ªå¤çæ ç¾çæ¹æ³ï¼
public int doStartTag() throws JspException
public int doEndTag() throws JspException
2ãdoStartTagï¼ä½JSP容å¨éå°èªå®ä¹æ ç¾çèµ·å§æ å¿ï¼å°±ä¼è°ç¨doStartTag()æ¹æ³ã
doStartTag()æ¹æ³è¿åä¸ä¸ªæ´æ°å¼ï¼ç¨æ¥å³å®ç¨åºçåç»æµç¨ã
A.Tag.SKIP_BODYï¼è¡¨ç¤º?>â¦ä¹é´çå 容被忽ç¥ï¼
B.Tag.EVAL_BODY_INCLUDEï¼è¡¨ç¤ºæ ç¾ä¹é´çå 容被æ£å¸¸æ§è¡ã
3ãdoEndTagï¼ä½JSP容å¨éå°èªå®ä¹æ ç¾çç»ææ å¿ï¼å°±ä¼è°ç¨doEndTag()æ¹æ³ãdoEndTag()æ¹æ³ä¹è¿åä¸ä¸ªæ´æ°å¼ï¼ç¨æ¥å³å®ç¨åºåç»æµç¨ã
A.Tag.SKIP_PAGEï¼è¡¨ç¤ºç«å»åæ¢æ§è¡ç½é¡µï¼ç½é¡µä¸æªå¤ççéæå 容åJSPç¨åºå被忽ç¥ä»»ä½å·²æçè¾åºå 容ç«å»è¿åå°å®¢æ·çæµè§å¨ä¸ã
B.Tag_EVAL_PAGEï¼è¡¨ç¤ºæç §æ£å¸¸çæµç¨ç»§ç»æ§è¡JSPç½é¡µã
ä¸ãç¨æ·èªå®ä¹çæ ç¾å±æ§
å¦æå¨æ ç¾ä¸è¿å å«äºèªå®ä¹çå±æ§ï¼é£ä¹å¨æ ç¾å¤çç±»ä¸åºè¯¥å°è¿ä¸ªå±æ§ä½ä¸ºæååéï¼å¹¶ä¸åå«æä¾è®¾ç½®å读åå±æ§çæ¹æ³ã
å «ãå建æ ç¾å¤çç±»çæ¥éª¤
1ãå建å
å«JSPç½é¡µéæææ¬çæ件(å³æ¯è¦æ¿æ¢èªå®ä¹JSPæ ç¾çææ¬)ï¼
2ãå¨Webåºç¨å¯å¨æ¶è£
è½½éæææ¬ï¼
3ãå建æ ç¾å¤çç±»ã
ä¹ãå¦ä½å建å å«JSPç½é¡µéæææ¬çæ件
1ã使ç¨java.util.Propertiesç±»æ¥åæ¾è¦æ¿æ¢ç½é¡µä¸èªå®ä¹JSPæ ç¾çéæææ¬ï¼
2ãProperties类代表äºä¸ç³»åå±æ§çéåï¼å ¶å®ä¾æ¢å¯ä»¥è¢«ä¿åå°æµä¸ï¼ä¹å¯ä»¥ä»æµä¸å è½½ãè¿äºææ¬ä»¥key/valueçå½¢å¼åæ¾å¨WEB-INFç®å½ä¸ï¼ä¾å¦key=valueï¼å¨å±æ§å表ä¸è¿äºkey/valueé½æ¯Stringç±»åçã
åãPropertiesç±»ç常ç¨API
1ãsetProperty(String key, String value)ï¼è°ç¨Hashtableç±»çputæ¹æ³æ·»å å±æ§ï¼
2ãgetProperty(String key)ï¼è·åå±æ§å表ä¸key对åºçå±æ§å¼ï¼
3ãload(InputStream in)ï¼ä»è¾å ¥æµå¯¹è±¡InputStreamä¸è¯»åå±æ§å表(Properties list)ï¼
4ãstore(OutputStream out,String coMMent)ï¼ä½¿ç¨éå½çæ ¼å¼å°å±æ§å表çå±æ§å¯¹åå ¥è¾åºæµå¯¹è±¡ä¸ï¼é»è®¤ä½¿ç¨ISO-88590-1ç¼ç æ ¼å¼,以è¡çæ¹å¼å¤çè¾å ¥ãå±æ§ç key/valueä¹é´ä»¥â=ã:âé 对ï¼ä»¥å车ãæ¢è¡åékey/valueé 对ã
åä¸ãServletContextç±»ç常ç¨API
1ãgetContext(String uripath)ï¼è¿åæå¡å¨ä¸uripathæ代表çServletContext对象ï¼
2ãgetInitParameter(String name)ï¼è¿åServletConfig对象ä¸nameåæ°çå¼ï¼
3ãgetMineType(String file)ï¼è¿åfileåæ°ä»£è¡¨çæ件çMIMEç±»åï¼
4ãgetRequestDispatcher(String path)ï¼è¿åpath代表çRequestDispacher对象ï¼
5ãgetResourceAsStream(String path)ï¼ä»¥è¾å ¥æµçå½¢å¼è¿åpath对åºçèµæºï¼å¨è¾å ¥çä¸å¯¹è±¡å¯ä»¥ä¸ºä»»æå½¢å¼çæ°æ®ï¼pathåæ°å¿ 须以â/âå¼å§ä¸ç¸å¯¹äºContext Rootã
åäºãå¦ä½ä½¿ç¨ServletContxt读å并ä¿åå±æ§æ件
1ãå建java.util.Properties类对象ï¼
2ãè·åServletContext对象ï¼
3ãå°å±æ§æ件以è¾å ¥æµçå½¢å¼è¯»å ¥å°æ个è¾å ¥æµå¯¹è±¡ä¸ï¼
4ãå°è¾å ¥æµå¯¹è±¡å è½½å°Properties对象ä¸ï¼
5ãå°Properties对象ä¿åå°ServletContext对象ä¸ã
åä¸ãå¦ä½å¨Webåºç¨å¯å¨æ¶è£ è½½éæææ¬
1ãå建继æ¿äºHttpServletç±»çåç±»ï¼å¨web.xmlä¸é ç½®è¿Servletæ¶è®¾ç½®load-on-startupå±æ§ï¼
someclass
somepackage.SomeClass1
2ãå¨è¿ä¸ªServletçinit()æ¹æ³ä¸å建java.util.Propertiesç±»
3ãè·åå½åWebåºç¨çServletContext对象
4ãå°WEB-INFç®å½ä¸çå±æ§æä»¶è¯»å ¥å°è¾å ¥æµInputStreamä¸ï¼
InputStream in = context.getResourceAsString("WEB-INF/someproperties.properties"); |
5ãå°è¾å ¥æµå è½½å°å±æ§å¯¹è±¡ä¸
ps.load(in);
6ãå°å±æ§å¯¹è±¡ä¿åå°ä¸
context.setAttribute("attributeName",ps); |
#p#
ååãå¦ä½å建æ ç¾å¤çç±»
1ãå¼å ¥å¿ éçèµæº
import javax.servlet.jsp.*; |
2ã继æ¿TagSupport类并è¦çdoStartTag()/doEndTag()æ¹æ³
3ãä»ServletContext对象ä¸è·åjava.util.Properties对象
4ãä»Properties对象ä¸è·åkey对åºçå±æ§å¼
5ã对è·åçå±æ§è¿è¡ç¸åºçå¤ç并è¾åºç»æ
åäºãå建æ ç¾åºæè¿°æ件(Tag Library Descriptor)
1ãæ ç¾åºæè¿°æ件ï¼ç®ç§°TLDï¼éç¨XMLæä»¶æ ¼å¼ï¼å®ä¹äºç¨æ·çæ ç¾åºãTLDæ件ä¸çå ç´ å¯ä»¥åæ3ç±»ï¼
A.æ ç¾åºå
ç´
B.æ ç¾å
ç´
C.æ ç¾å±æ§å
ç´
2ãæ ç¾åºå ç´ ç¨æ¥è®¾å®æ ç¾åºçç¸å ³ä¿¡æ¯ï¼å®ç常ç¨å±æ§æï¼
A.shortnameï¼æå®Tag Libraryé»è®¤çåç¼å(prefix)ï¼
B.uriï¼è®¾å®Tag Libraryçæä¸è®¿é®è¡¨ç¤ºç¬¦ã
3ãæ ç¾å ç´ ç¨æ¥å®ä¹ä¸ä¸ªæ ç¾ï¼å®ç常è§å±æ§æï¼
A.nameï¼è®¾å®Tagçååï¼
B.tagclassï¼è®¾å®Tagçå¤çç±»ï¼
C.bodycontentï¼è®¾å®æ ç¾ç主ä½(body)å 容ã
1)emptyï¼è¡¨ç¤ºæ ç¾ä¸æ²¡æbodyï¼
2)JSPï¼è¡¨ç¤ºæ ç¾çbodyä¸å¯ä»¥å å
¥JSPç¨åºä»£ç ï¼
3)tagdependentï¼è¡¨ç¤ºæ ç¾ä¸çå
容ç±æ ç¾èªå·±å»å¤çã
4ãæ ç¾å±æ§å ç´ ç¨æ¥å®ä¹æ ç¾çå±æ§ï¼å®ç常è§å±æ§æï¼
A.nameï¼å±æ§å称ï¼
B.requiredï¼å±æ§æ¯å¦å¿
éçï¼é»è®¤ä¸ºfalseï¼
C.rtexprvalueï¼å±æ§å¼æ¯å¦å¯ä»¥ä¸ºrequest-time表达å¼ï¼ä¹å°±æ¯ç±»ä¼¼äº< %=â¦% >ç表达å¼ã
åå ãå¨Webåºç¨ä¸ä½¿ç¨æ ç¾
1ãå¦æWebåºç¨ä¸ç¨å°äºèªå®ä¹JSPæ ç¾ï¼åå¿ é¡»å¨web.xmlæ件ä¸å å ¥å ç´ ï¼å®ç¨äºå£°ææå¼ç¨çæ ç¾æå¨çæ ç¾åº
/sometaglib
/WEB-INF/someTLD.tld
2ã设å®Tag Libraryçæä¸æ 示符ï¼å¨Webåºç¨ä¸å°æ ¹æ®å®æ¥å¼ç¨Tag Librayï¼
3ãæå®åTag Library对åºçTLDæ件çä½ç½®ï¼
4ãå¨JSPæ件ä¸éè¦å å ¥<% @ taglib% >æ令æ¥å£°æ对æ ç¾åºçå¼ç¨ãä¾å¦ï¼
<% @ taglib prefix = âsomePrefixâ uri = "/someuri" %> |
5ãprefix表示å¨JSPç½é¡µä¸å¼ç¨è¿ä¸ªæ ç¾åºçæ ç¾æ¶çåç¼ï¼uriç¨æ¥æå®Tag Libraryçæ è¯ç¬¦ï¼å®å¿ é¡»åweb.xmlä¸çå±æ§ä¿æä¸è´ã
ä¾åï¼
DisplayTagç±»ï¼
package cn.xs.displaytag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class DisplayTag extends TagSupport{ private static final long serialVersionUID = 1L; @Override public int doStartTag() throws JspException { System.out.println("doStartTag()"); return EVAL_BODY_INCLUDE; } @Override public int doAfterBody() throws JspException { System.out.println("doAfterBody()"); return SKIP_BODY; } @Override public int doEndTag() throws JspException { System.out.println("doEndTag()"); JspWriter out = this.pageContext.getOut(); try { out.print("<h2>"); out.print("hello world!"); out.print("</h2>"); } catch (IOException e) { e.printStackTrace(); } return super.doEndTag(); } }
display.tld
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>bean</shortname> <uri>/WEB-INF/tld/display.tld</uri> <tag> <name>display</name> <tagclass>cn.xs.displaytag.DisplayTag</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name></name> <required></required> <rtexprvalue></rtexprvalue> </attribute> </tag> </taglib>
index.jspï¼
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/WEB-INF/tld/display.tld" prefix="test" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<test:display>>>>>>>>>>><br></test:display>
</body>
</html>
å·¥ç¨ç»æï¼
è¿è¡ï¼
é¨åèµææ¶éæ¥èªäºèç½....