JavaWEB——简单标签简单总结

自定义标签:

  什么是自定义标签?

用户定义的一种自定义的jsp标记 。当一个含有自定义标签的jsp页面被jsp引擎编译成servlet时,tag标签被转化成了对一个称为 标签处理类 的对象的操作。于是,当jsp页面被jsp引擎转化为servlet后,实际上tag标签被转化为了对tag处理类的操作。 

自定义标签有什么用

•自定义标签可以降低 jsp 开发的复杂度和维护量,从html 角度来说,可以使 html 不用去过多的关注那些比较复杂的商业逻辑(业务逻辑)。
•利用自定义标签, 可以软件开发人员和页面设计人员合理分工:页面设计人员可以把精力集中在使用标签(HTML,XML或者JSP)创建网站上,而软件开发人员则可以将精力集中在实现底层功能上面,如国际化等,从而提高了工程生产力
•将具有共用特性的tag库应用于不同的项目中,体现了 软件复用的思想。 

自定义标签的开发步骤:

1.编写完成标签功能的Java类(标签处理器)

2.编写标签库描述文件(tld文件),在其中对该标签进行描述

3.在JSP页面导入并使用该标签


1.编写完成标签功能的Java类(标签处理器):

其实它就是一个Java类,只是实现了某个接口或者继承了某一个类。可以实现javax.servlet.jsp.tagext.SimpleTag接口或者

继承SimpleTagSupport该类。

若实现接口,需要实现它的若干个方法:doTag(),setParent(JspTag parent);getParent(); setJspContext(JspContext pc);setJspBody(JspFragment jspBody).其中最重要的是doTag()方法。看方法名就知道,咱们需要把该标签需要实现的功能的代码写在该方法里面。setJspContext(JspContext pc)也很重要,它把代表JSP引擎的pageContext传给标签处理类,它先于doTag()方法。

private PageContext pageContext;
	@Override
	public void setJspContext(JspContext pc) {
		// TODO Auto-generated method stub
		this.pageContext=(PageContext) pc;
		
	}
有了pageContext就可以得到页面的其他8个隐含对象,如out,response,request等等,咱 们就可以利用这些隐含对象去实现咱们想让它实现的功能。所以JSP页面能做的,标签都能做。

若是选择用继承SimpleTagSupport类的方法,则咱们需要重写doTag()方法。那pageContext对象去哪得到呢?翻开API,看到有个getJspContext()方法,得到JspContext对象,然后强制转型为pageContext对象即可。

比如咱们现在只需要简单的在浏览器界面上输出“hello".

doTag()方法:

public void doTag() throws JspException, IOException {
		System.out.println("doTag");
	HttpServletRequest request =(HttpServletRequest) pageContext.getRequest();
	pageContext.getOut().println("Hello"+request.getParameter("name"));
	
	}

2.编写标签库描述文件(tld文件),在其中对该标签进行描述:

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <!-- 描述TLD文件 -->
  <description>MyTag 1.0  core library</description>
  <display-name>MyTag core</display-name>
  <tlib-version>1.0</tlib-version>
  <!--  建议在JSP页面上使用的标签前缀-->
  <short-name>mytag</short-name>
  <!--  作为tld文件的id,用来唯一标识当前的tld 文件,多个tld文件的Uri不能重复。通过
  JSP页面的taglib 标签的Uri属性  来引用-->
  <uri>http://www.mytag.com/mytag/core</uri>
  
  <!-- 描述自定义的helloSimpleTag	标签 -->
  <tag>
  				<!-- 标签名 ,在JSP 页面上使用标签时的名字-->
  			<name>hello</name>
  			<!-- 标签所在的全类名 -->
  			<tag-class>tag.HelloSimpleTag</tag-class>
  			<!-- 标签体的类型 -->
  			<body-content>empty</body-content>
  			
  			<!--  描述当前标签的属性-->
  			<attribute>
  			<!-- 属性名 -->
  						<name>value</name>
  						<!-- 该属性是否为必须 -->
  						<required>false</required>
  						<!-- runtime expression value
  					当前属性是否可以接受运行时表达式的动态值
  						 -->
  						<rtexprvalue>false</rtexprvalue>
  			</attribute>
  			
  				<attribute>
  			<!-- 属性名 -->
  						<name>count</name>
  						<!-- 该属性是否为必须 -->
  						<required>false</required>
  						<!-- runtime expression value
  					当前属性是否可以接受运行时表达式的动态值
  						 -->
  						<rtexprvalue>false</rtexprvalue>
  			</attribute>
  
  
  </tag>
  
  </taglib>

其中,name和count是自定义标签的属性。


3.在JSP页面导入并使用该标签:

	<myTag:hello/>
hello和tld文件中的标签名要一致。一个tld文件中可以有多个标签和标签名。所以在导入使用的时候也要注意点。

通过以上步骤,就完成了一个简单自定义标签的开发。

那么自定义标签中的属性又是干嘛的呢?也许在咱们的tld文件中需要传入几个参数,这时就需要属性了。要想使用属性,首先需要在Java类中声明这些属性以及相应的set()方法.

private String value;
	private String count;
	public void setValue(String valueString) {
		this.value = valueString;
	}
	
	public void setCount(String count) {
		this.count = count;
	}
同时,也需要在tld文件中对这些属性进行描述。最后,在咱们导入使用的时候,写上这些参数名和值即可
<mytag:	value="myTag" count="10"/>

doTag()方法:
public void doTag() throws JspException, IOException {
		System.out.println("doTag");
	HttpServletRequest request =(HttpServletRequest) pageContext.getRequest();
	System.out.println("value:"+value+"count:"+count);
	pageContext.getOut().println("Hello"+request.getParameter("name"));
	
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值