一:国庆结束了,回来上班,结果老大说过两天才出差,所以这两天就用来补自己不太懂的知识或者以前没有熟悉的知识,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. c++实验3类和对象

     实 验 3: part 1:验证 part 2:graph #include <iostream> #include "graph.h" using namespac ...

  2. Python的类(二)

    一.类的重写 对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写.为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名.这样, Python将不会考虑这个父类方法,而只关注你 ...

  3. Cyclone IV器件的逻辑单元和逻辑阵列快

    1. 逻辑单元 (LE) 在 Cyclone IV 器件结构中是最小的逻辑单位.LE 紧密且有效的提供了高级功能的逻辑使用.每个 LE 有以下特性:一个四口输入的查找表 (LUT),以实现四种变量的任 ...

  4. iOS中的数据库应用

    iOS中的数据库应用 SLQLite简介 什么是SQLite SQLite是一款轻型的嵌入式数据库 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 它的处理速度比Mysql.Post ...

  5. spring+apache dbcp +oracle 连接池配置以及优化

    特此记录 <!-- 数据源配置, 使用应用中的DBCP数据库连接池 --> <bean id="dataSource" class="org.apach ...

  6. Paper Reading - Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge

    Link of the Paper: https://arxiv.org/abs/1609.06647 A Correlative Paper: Show and Tell: A Neural Ima ...

  7. preparedstatement execute()操作成功!但是返回false

    转自http://blog.sina.com.cn/s/blog_963fb3af01013rcs.html Connection con = getConn(); String sql2 = &qu ...

  8. mysql语法总结

    增: 删: 改: 查: 索引: 建: alter table: sql一些常用的经典语句,最后是select as的用法

  9. 安装一台Linux练习机前的考虑——主机规划与磁盘分区

    要安装一台Linux主机并不是那么简单的事,我们必须要针对distributions的特性.服务器软件的能力.未来的升级需求.硬件扩充性需求等来考虑,对于磁盘分区.文件系统.Linux操作较频繁的目录 ...

  10. RMQ问题+ST算法

    一.相关定义 RMQ问题 求给定区间的最值: 一般题目给定许多询问区间. 常见问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大 ...