一:国庆结束了,回来上班,结果老大说过两天才出差,所以这两天就用来补自己不太懂的知识或者以前没有熟悉的知识,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. 【转】在Ubuntu 16.10 Server 上部署 Moodle

    第一步 安装 Ubuntu 16.10 Server LTS Moodle 的官方文档肯定了Ubuntu Server LTS 是适合运维Moodle平台的. 1.使用纯代码交互的服务器Ubuntu更 ...

  2. 在spring+beranate中多数据源中使用 ThreadLocal ,总结的原理 --费元星

    设计模式 首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问 ...

  3. XPivot 用户手册及版本更新公示

    此文仅介绍XPivot的通用功能,如有对项目中定制的高级功能感兴趣的可留言讨论 XPivot当前版本v2.2 [2015-04-20发布] v2.1 下载链接: http://pan.baidu.co ...

  4. 「题目代码」P1013~P1017(Java)

    1013 C基础-求偶数和 import java.util.*; import java.io.*; import java.math.BigInteger; public class Main { ...

  5. Qt QPainter::end: Painter ended whith 2 saced states

    在使用Qt  QPainter 的时候,有时会遇到“QPainter::end: Painter ended whith 2 saced states” 这时由于我们在使用的QPanter.trans ...

  6. python 基础篇 04(列表 元组 常规操作)

    本节主要内容:1. 列表2. 列表的增删改查3. 列表的嵌套4. 元组和元组嵌套5. range 一. 列表1.1 列表的介绍列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. ...

  7. 命令行编译 WPF

    在开发调试代码 WPF 时,经常需要在修改完成代码后,点击 Rebuild,然后到指定文件夹下点击打开对应的 .exe 验证程序是否正确, 可以通过以下命名实现修改程序后,点击一个 .bat 文件,直 ...

  8. MyBatis整体了解

    背景资料 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBati ...

  9. tarball

    环境:Linux系统 命令:tar 关键:tar打包出来的文件有没有进行压缩所得到的文件称谓不同 仅是打包,得到的文件我们称为tarfile 包含压缩,得到的文件我们称为tarball

  10. Activiti工作流(一)——Activiti Diagram

    工作流解决在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现. 使用Eclipse开发,需要安排工作流插件,详情见下面. Name ...