JAVA编程:JSP中的TagLib使用(4)--zt
最初被命名为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++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱. 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
页:
[1]