一:国庆结束了,回来上班,结果老大说过两天才出差,所以这两天就用来补自己不太懂的知识或者以前没有熟悉的知识,jsp的标签就是,因为在项目中自己封装了一些标签,但是我自己只是会用,真正的原理性的东西我还是不是很明白,所以今天一天的时间基本上都是在网上找资料来熟悉jsp标签的知识。

    二:标签中tld中的属性rtexprvalue的用处

      rtexprvalue的全称是 Run-time Expression Value,网上说是否可以利用jsp表达式。

      rtexprvalue表示标签中的值是否可以直接指定或者可以动态(使用脚本或者el表达式)指定;

      reruired表示是否是必须的;

下面说一说具体的用法,先给出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" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
<description><![CDATA[自定义标签]]]]></description>
<display-name>my Tags</display-name>
<tlib-version>0.1</tlib-version>
<short-name>my</short-name>
<uri>/mytag</uri>
<tag>
<!--此处是有些内容我们不想让xml的解析引擎解析执行,而是当做原始内容处理,此时我们可以把该部分xml的内容放在CDATA区域的内容中,xml解析程序不会处理,而是原封不动的输出,这里我们就是想在jsp页面在给该属性赋值时把鼠标放在该该属性上时显示该提示内容-->
<description><![CDATA[显示个人姓名]]></description>
      <!-- 标签的名称-->
<name>wh</name>
<tag-class>org.wh.gsh.web.tag.PersonTag</tag-class>
<body-content>JSP</body-content>
<attribute>
  <description><![CDATA[显示个人姓名]]></description>
          <!--属性名称-->
         <name>personbh</name>
          <!--是否是必须的属性-->
         <required>true</required>
          <!--见上面-->
         <rtexprvalue>true</rtexprvalue>
     </attribute>
     <attribute>
         <description><![CDATA[所属部门]]</description>
         <name>departmen</name>
          <required>false</required>
         <rtexprvalue>false</rtexprvalue>
     </attribute>
</tag>

 <body-content>元素可以设置的内容有3种。

<body-content>

jsp页面的用法如下:元素主要的功能是指定标签体的类型,可能的取值有以下4种。

(1)empty:没有标签体

(2)JSP:标签体可以包含文本、EL、表达式或者JSP标签,但对于简单标签无效。

(3)scriptless:标签体可以包含文本、EL表达式、JSP标签,但不能包含JSP的脚本元素。

(4)tagdependent:表示标签体交由标签本身去解析处理。若指定tagdependent,在标签体中的所有代码都会原封不动的交给标签处理器,而不是将执行结果传递给标签处理器。

上面所说的标签体是这么个意思:如果标签写成这样<my:wh/>---->表示没有标签体,如果写成这样<my:wh></my:wh>则有标签体

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="my" uri="/mytag" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>个人信息页面</title>
<body>
<my:wh personbh="${p.bh}" department='1'></my:wh>
<!-- 这里的personbh的值可以用直接指定或者是动态的绑定(因为<rtexprvalue>true</rtexpvalue>的值为true)-->
<!-- 而department的值却只能直接指定,不能动态绑定如果写成这样的话就是错误的
<my:wh personbh="${p.bh}" department='"${p.depid}"></my:wh>--> ---->false
</body>

三:标签返回值的效果及意义:

在TagSupport类中,有如下4个方法最重要:doStartTag(),doEndTag(),doAfterTag(),release()

(1)doStartTag():此方法是开始执行标签,有如下两种返回值:
    SKIP_BODY:表示忽略标签体的内容,而将执行权交给doEndTag()方法,

    EVAL_BODY_INCLUDE:表示执行标签体的内容。

(2)doAfterTag():此方法是IterationTag接口与Tag接口的差别所在,用来重复执行标签体的内容,有如下两种返回值

    SKIP_BODY:表示忽略标签体的内容,并且将执行权交给doEndTag()方法;

    EVAL_BODY_AGAIN:表示重复执行标签体内容,会重复调用doAfterBody()方法,一直循环执行下去,直到doAfterBody()方法但会SKIP_BODY为止。

(3)doEndTag():此方法在标签结束时执行,有如下两种返回值

    SKIP_PAGE:在JSP页面应该立刻停止执行(即是不执行下面的jsp代码),并将所有的输出立刻回传到浏览器上。

    EVAL_PAGE:表示jsp正常的运行

四:TagSupport和BodyTagSupport的区别

  TagSupport和BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否则如果需要交互就用BodyTagSupport。

    交互的意思大概可以理解成标签处理类是否要读取标签体的内容和改变标签体返回的内容。再说明白点就是如果要更改或者处理标签体中的内容则必须实现BodyTagSupport类。(标签里面都可以有内容,但是要更改内容或作其他处理就必须实现BodyTagSupport类);

下面说说BodyTagSupport新增了的方法

public static final int EVAL_BODY_BUFFERED :表示该标签体的内容应该被出俩,所有的处理都应该保存到BodyContent类中;

protected  BodyContent bodyContent  :存放处理结果

public JspWriter getPreviousOut() :取得JspWriter的输出流对象

比如下面的代码就是把标签体中的截取一部分进行显示,代码如下

MyTag.java

package org.wh.demo.Tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTag;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.Tag; public class MyTag extends BodyTagSupport { /**
*
*/
private static final long serialVersionUID = 1L; public int doStartTag() throws JspException{
return BodyTag.EVAL_BODY_BUFFERED;
} public int doEndTag() throws JspException{
BodyContent bc=this.getBodyContent();//获取标签体的内容
String ct=bc.getString();//转换为字符串
String rt=ct.substring(5,10);
try{
this.pageContext.getOut().write(rt);
}catch(Exception e){
throw new RuntimeException(e);
} return Tag.EVAL_PAGE;
} }
mytag.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"
version="2.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
<description>标签的测试</description>
<display-name>my tags</display-name>
<tlib-version>0.0</tlib-version>
<short-name>my</short-name>
<uri>/mytags</uri>
<tag>
<description><![CDATA[自己定义的标签]]></description>
<name>wh</name>
<tag-class>org.wh.demo.Tag.MyTag</tag-class>
<body-content>scriptless</body-content><!--这里用JSP或者scriptless都行,具体的在上年已经做了说明-->
</tag>
</taglib>
HelloTag.jsp:

<%@ page language="java" contentType="text/html; charset=GBk"
pageEncoding="GBK"%>
<%@taglib uri="/mytags" prefix="my" %>
<!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>
<h1>Hello Tag!!!</h1>
<h2>自己定义的标签使用如下效果</h2>
<my:wh>这是我写的第一个标签</my:wh>
</body>
</html>

结果如下:

我现在就是知道怎么用了,以前自己只是只看不做的人,现在自己在边看边实践,即使是最简单的东西,只是还是极少成多的。现在就补下基础薄弱的地方。自己做一遍比看几百遍都强的。自己还是得花时间来学习下源码,最忌就再次温习下java和java web 和linux,好多东西要学,这几天没事情干就总结了这两个月实习学到的东西和补知识点。任重而道远啊。努力,今天看小说看到了一句话”匹夫而为百世师,一言二为天下法“,这气概,没得说啊,收到短信要交一篇3000字的论文,坑爹啊,我还得去找论文凑一篇交上去。努力吧,boys!!!

java web标签的更多相关文章

  1. java web开发_购物车功能实现

    java web开发_购物车功能实现 之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: ...

  2. 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

    EL应用      自定义一个标签,实现两个字符串的相加 1回顾      1.1servlet生命周期           init(ServletConfig)           service ...

  3. java web(一) 使用sql标签库+tomcat+mysql手动创建一个jsp练习总结

    2016-09-0111:06:53                                     使用sql标签库+tomcat+mysql手动创建一个jsp 1. 1.1安装tomcat ...

  4. Java Web之JSTL标准标签库总结

    [文档整理系列] Java Web之JSTL标准标签库总结

  5. [原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. 高效 Java Web 开发框架 JessMA v3.5.1

    JessMA 是功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hibernate.MyBatis 与 J ...

  7. 高效 Java Web 开发框架 JessMA v3.4.1

    JessMA 是功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hibernate.MyBatis 与 J ...

  8. java web 之客户关系管理系统

    这个周末真的是觉得自己学会了一个比较高大上的本领,为什么这么觉得呢?那是因为星期六的时候觉得自己可以看看源码能做出来,可是让我头疼的是花费了一上午的时间还是没有弄出来,还好上天给了我机会,要是没有老师 ...

  9. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...

随机推荐

  1. uber司机已经激活了,就是还没有上传头

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. elasticsearch 关联查询

    父-子关系文档 父-子关系文档 在实质上类似于 nested model :允许将一个对象实体和另外一个对象实体关联起来. 而这两种类型的主要区别是:在 nested objects 文档中,所有对象 ...

  3. Django笔记 —— 模型高级进阶

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  4. 『JavaScript』new关键字

    原文 new关键字做了什么 在JavaScript中,使用new关键字后,意味着做了如下四件事情: 创建一个新的对象,这个对象的类型是object: 设置这个新的对象的内部.可访问性和[[protot ...

  5. eclipse 列编辑

    ALT + SHIFT +A 进入列编辑模式,可以一次性操作多行列. 再次按住 ALT + SHIFT +A 则退出列编辑模式.

  6. python 基础篇 15 内置函数和匿名函数

    ------------------------>>>>>>>>>>>>>>>内置函数<<< ...

  7. VM实例的生命周期管理

    有的操作功能比较类似,也有各自的适用场景,简单介绍下上述几个重要的操作: 常规操作: 常规操作中,Launch.Start.Reboot.Shut Off 和 Terminate 都很好理解. 下面几 ...

  8. URAL 1736 Chinese Hockey(网络最大流)

    Description Sergey and Denis closely followed the Chinese Football Championship, which has just come ...

  9. 浅谈c语言和c++中struct的区别

    今天做二叉树的时候,发现利用结构体有点乱,不知道怎么回事,我之前知道c语言中声明一个结构体变量时需要通过 struct 结构体名 变量名,而在c++中,可以不要struct,由于可以利用typedef ...

  10. Asp.Net生命周期系列一

    Asp.Net生命周期对于初级甚至中级程序员来说,一直都是一个难题,很多程序员不了解生命周期,导致使用Asp.Net做开发感觉很不灵活,感觉太多东西被微软封装好了,我们不能改变,其实只要你稍微了解一下 ...