仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 561|回复: 10
打印 上一主题 下一主题

[学习教程] JAVA编程:JSP中的TagLib使用(4)--zt

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:27:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱.
冷月葬花魂 该用户已被删除
沙发
发表于 2015-1-18 16:50:34 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
谁可相欹 该用户已被删除
板凳
发表于 2015-1-20 05:15:31 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
兰色精灵 该用户已被删除
地板
发表于 2015-1-25 13:02:49 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
再见西城 该用户已被删除
5#
发表于 2015-2-2 22:09:37 来自手机 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
透明 该用户已被删除
6#
发表于 2015-2-8 11:27:23 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
飘灵儿 该用户已被删除
7#
发表于 2015-2-23 07:45:03 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
活着的死人 该用户已被删除
8#
发表于 2015-2-26 00:12:01 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
精灵巫婆 该用户已被删除
9#
发表于 2015-3-8 10:36:05 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-17 20:10:35 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
飘飘悠悠 该用户已被删除
11#
发表于 2015-3-24 23:46:36 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 19:21

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表