|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。jsJSP中的TagLib使用(4)
False/aspcn
----------------------------------------------------------------------
上面到了关头部分乐。对tag举行处置。实在良多情形下我们是利用已供应的taglib.
他人/公司已做好了tag和处置部分,打好了包我们必要做的只是在我们的jsp中往使用.
可是当我们本人做个taglib时,就必要编写这部分taghandler了.
这里只针对下面文件里提到的inserttag,其他的为了不反复,就纷歧一申明了
====================InsertTag.java==============================
/*
*$Id:InsertTag.java,v1.132000/03/0402:54:57brydonExp$
*Copyright1999SunMicrosystems,Inc.Allrightsreserved.
*Copyright1999SunMicrosystems,Inc.Tousdroitsréservés.
*/
packagecom.sun.estore.taglib;
importjavax.servlet.jsp.JspTagException;
importjavax.servlet.jsp.tagext.TagSupport;
importcom.sun.estore.util.Debug;
/**
*ThisclassisaneasyinterfacetotheJSPtemplateorother
*textthatneedstobeinserted.
*@authorGregMurray
*/
publicclassInsertTagextendsTagSupport{
privatebooleandirectInclude=false;
privateStringparameter=null;
privateStringtemplateName=null;
privateTemplatetemplate=null;
privateTemplateParametertemplateParam=null;
/**
*defaultconstructor
*/
publicInsertTag(){
super();
}
publicvoidsetTemplate(StringtemplateName){
this.templateName=templateName;
}
publicvoidsetParameter(Stringparameter){
this.parameter=parameter;
}
publicintdoStartTag(){
try{
if(templateName!=null){
template=(Template)pageContext.getRequest().getAttribute("template");
}
}catch(NullPointerExceptione){
Debug.println("Errorextractingtemplatefromsession:"+e);
}
if(parameter!=null&&template!=null)templateParam=(TemplateParameter)template.getParam(parameter);
if(templateParam!=null)directInclude=templateParam.isDirect();
returnSKIP_BODY;
}
publicintdoEndTag()throwsJspTagException{
try{
pageContext.getOut().flush();
}catch(Exceptione){
//donothing
}
try{
if(directInclude&&templateParam!=null){
pageContext.getOut().println(templateParam.getValue());
}elseif(templateParam!=null){
if(templateParam.getValue()!=null)pageContext.getRequest().getRequestDispatcher(templateParam.getValue()).include(pageContext.getRequest(),pageContext.getResponse());
}
}catch(Throwableex){
ex.printStackTrace();
}
returnEVAL_PAGE;
}
}
能够看到。InsertTag.java承继了javax.servlet.jsp.tagext.TagSupport类.由于在TagSupport中界说了一些接口.
我们在处置自界说的tag时,对父类的doStartTag()和doEndTag()要举行重载,假如在tld文件中界说了tag的属性,就必要在taghandler里对每一个属性界说响应的setxxx/getxxx办法.
在doStartTag()中是从Template类所界说的Hashtable中获得TemplateParameter对象.
在doEndTag()中
pageContext.getRequest().getRequestDispatcher(templateParam.getValue()).include(pageContext.getRequest(),pageContext.getResponse());
这是在页面里包括经由过程jsp页的高低文前往经由过程tag的属性值指定的资本对象(RequestDispatcher)所发生的内容..
doStartTag()和doEndTag()前往值是在TagInterface里界说的静态int
SKIP_BODY隐含0
Skipbodyevaluation.ValidreturnvaluefordoStartTaganddoAfterBody.跳过对body的处置。
就是跳过了入手下手和停止标签之间的代码。
EVAL_BODY_INCLUDE隐含1
Evaluatebodyintoexistingoutstream.ValidreturnvaluefordoStartTag.
ThisisanillegalreturnvaluefordoStartTagwhentheclassimplementsBodyTag,
sinceBodyTagimpliesthecreationofanewBodyContent.
将body的内容输入到存在的输入流中。包含是jsp代码,也能够被输入
SKIP_PAGE隐含5
Skiptherestofthepage.ValidreturnvaluefordoEndTag.
疏忽剩下的页面。
EVAL_PAGE隐含6
Continueevaluatingthepage.ValidreturnvaluefordoEndTag().
持续实行上面的页
在这个类里另有对其他类的援用,我就不列出来了.列位能够本人往研讨.
自界说标签(Customtags)完成了javax.servlet.jsp.tagext.Tagorjavax.servlet.jsp.tagext.BodyTag
interface.使用javax.servlet.jsp.JspWriter来输入.
TagSupportclass供应了对interfaceTag的隐含完成.序列化编发数据.
publicclassTagSupportextendsjava.lang.ObjectimplementsTag,java.io.Serializable
BodyTagSupportclass供应了对interfaceBodyTag的隐含完成.承继TagSupport
publicclassBodyTagSupportextendsTagSupportimplementsBodyTag
我们在编写taghandler时必要承继TagSupport类或BodyTagSupport类,然后重载doStartTag()和doEndTag().
还能够再进一步分别.将详细完成放到bean里
这些自界说标签的类所应放的地位应当在WEB-INF/classes或WEB-INF/lib
最初将customtaglibraries打包成.war文件.关于.war文件,以下图所示给出了资本布局图。
经由过程部署形貌符来把持映照。
部署形貌符是个XML文件。具体的请详见有关文档材料。这里只申明
部署TagLib的部分。
JSPcustomtaglibraries(optional)
SpecifiesURLforlocatingTagLibraryDescriptor
…
uri
path
…
/**************自界说TagLib例子:JSPpage*******************
………
*******************************************************/
文件地位以下:
这个例子很复杂,只是作为实习利用.你也能够本人举行扩大,多实习几种处置办法.例如说标签带有属性,
标签带有内容,利用bean处置逻辑等等
关于将这些文件打包成.war文件.这里就不具体申明了.请依据你利用的applicationserver情形本人完成吧.
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱. |
|