JSP标记学习笔记

开发JSP自定义标记 自定义标记为Web程序提供了一种在JSP应用程序中重用和封装反复出现的复杂代码的机制,从而实现了Java代码的易用性和可重用性。访问JSP页面的request、response、in和out等所有隐式变量。修改通过调用JSP页面生成的响应。将JavaBean组件初始化和实例化。空标记:指没有任何属性或主体的自定义标记。td:welcome带属性的标记:值可以定义属性来对标记行为进行自定义的自定义标记。可以通过字符变量或带有request对象的运行时表达式来设置属性值。 阅读详情
 

JSP标记学习笔记

ginkou.fly  2002-9-18

1.  概述

1)  什么是JSP标记

顾名思义,JSP标记就是在JSP文件中使用的标记。它类似于html语法中的标记,像head 、table 。通过在JSP文件中引用它(就像使用html标记那样),可以更方便的实现对Java 代码模块的重用。

2)  为什么要使用JSP 标记技术(与javabean相比)

好处:

J JSP 标记可以处理JSP正文的内容,比如改变文本显示样式;而javabean不可以。

J JSP标记接口简单,易于使用,也易于开发和维护。

坏处:

L JSP标记在进行设置时要比javabean复杂很多,体现在JSP标记库描述文件(*.tld)的配置上。

L JSP标记实现的功能远不如javabean强大。

L 当前只要JSP1.1支持JSP标记,而JSP1.0和1.1都支持对Bean的使用。

2.  JSP标记的开发简介。

JSP标记的开发需要编写2种独立的文件。一种是定义标记功能的java类文件,一种是将xml元素名称(标记)映射到标记实现的标记库描述符文件。

⑴ 编写标记处理程序类文件

需要继承javax.servlet.jsp.tagext.TagSupport类;

简单示例:

//文件名ExampleTag.java

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

import java.io.*;

   public class ExampleTag extends TagSupport {

         //程序的执行起始点

         public int doStartTag() { 

              try {

                     JspWriter out=pageContext.getOut();

                     out.print(“Custom tag example”);

        }catch (IOException ioe) {

                     System.out.println(“Error in ExampleTag : “ + ioe);

        }

            return(SKIP_BODY);

            //当标记包括的内容为空时返回SKIP_BODY,表示标记功能

            //已执行完成

      }

}

  编译好的class文件将位于服务器的的特定位置。

⑵ 编写标记库描述符文件

将标记名和其代表的功能实现联系在一起。

  简单示例:

  <!--文件名:csajsp-taglib.tld-->

  <? xml version=”1.0” encoding=”ISO-8859-1” ?>

<!DOCTYPE taglib

PUBLIC “-//Sun Microsystem,Inc.//DTD JSP Tag Library 1.1//EN”

http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd>

//以上是标准的文件头

//以下是标签库描述

<tlibversion>1.0</tlibversion> //Tag 库的版本

<jspversion>1.1</jspversion> //Jsp 库的版本

<shortname>csajsp</shortname>//自定义标记前缀名

<uri></uri> //标记描述符文件的uri,可以是空

<info>My custom tag!</info> //标记库的描述信息

//以下定义新标记

<tag>

       <name>example</name> //自定义的标记名

       <tagclass>tags.ExampleTag</tagclass>//定位标签处理类文件

<info>Simplest example</info>//描述信息

<bodycontent>EMPTY</bodycontent> // 不处理Jsp文件正文内容

</tag>

</taglib>

此文件将配置在服务器的特定位置

⑶ 使用以上自定义的标记

<!--文件名:simpleExample.jsp-->

<!DOCTYPE HTML PUBLIC  “- // W3C//DTD HTML 4.0 Transitional //EN”>

<HTML>

<HEAD>

<%@ taglib uri = “csajsp-taglib.tld” prefix = “csajsp” %> //进行标记使用声明

<TITLE><csajsp:example /><TITLE>

<LINK REL=STYLESHEET HREF=”JSP-styles.css”

                         TYPE=”text/css”>

<HEAD>

<BODY>

<H1><csajsp:example /><H1> /使用标记

<csajsp:example />

</BODY>

</HTML>

这样最终在在浏览器上输出为

  Custom tag example

3.  深入的JSP标记开发

⑴ 添加标记属性

在标记处理类中可以通过函数setAttribute(String value) 为jsp标记分配属性,这样标记处理程序根据获取的属性值来实现相关功能。

比如 private String message = “Default Message”;

public void setMessage(String message) {

        this.message=message;

  }

注意:属性名message是小写的,设置函数中的Message是大写的。

◆与之相关的在tld文件中需要在tag元素中添加如下元素

<tag>

<attribute>

<name>message</name> //属性名

<required>false</requied> //属性值是否必须提供。False表示不必,存在缺省值。

<rtexprvalue>true</rtexprvalue>

//ture表示属性值可以使用jsp表达式,false表示禁

//止使用

</attribute>

</tag>

◆对应jsp文件中引用为:<prefix : name message = “ Hello!” />

⑵ 使用标记正文

 即是在标记中使用一些包含jsp脚本元素、文本等的内容,这些内容由jsp引擎处理。

 形式如下:

 <prefix : tagname> body(正文内容) <prefix : tagname>

 在处理jsp标记的正文前,将会调用处理程序的doStartTag()方法,此时要在此方法中返回EVAL_BODY_INCLUDE 以表明包含有标记正文;处理完后,将会调用doEndTag()方法,此后要让jsp引擎继续处理后面的页面,得返回EVAL_PAGE,否则返回SKIP_PAGE。

 ◆对应在tld文件中需要在tag元素中添加如下元素

 <tag>

 …

 <bodycontent>JSP</bodycontent> //表明包含正文

 …

 </tag>

 另外:可以设置一些条件来判断是否包含正文的,如下:

 public int doStartTag() {

       ServletRequest request = pageContext.getRequest();

      String debugFlag = request .getParameter(“debug”);

      If ((debugFlag!=null) && (!debugFlag.equalsIgnoreCase(“false”))) {

          Return (EVAL_BODY_INCLUDE);

       }

       else {

           return(SKIP_BODY);

       }

  }

这样只有在url尾部给出请求参数值debug = true,才会显示标记正文的内容。这样可以隐藏一些调试信息。

⑶ 对标记正文进行处理

  jsp的标记可以对包含的正文进行处理(修改),然后再输出。这需要标记处理类继承BodyTagSupport类(TagSupport类的继承)。这个类提供了2个重要的方法用于正文处理。

  → doAfterBody:默认执行的方法,在此方法中包含正文的处理过程。

→ getBodyContent:返回BodyContent类型的的对象,此对象包含了有关标记正文的信息。

 BodyContent类型包含的重要方法:

→ getEnclosingWriter:返回JspWriter方法,输出内容。

→ getString:返回包含全部jsp标记正文的字符串。

注意:这里和⑵中介绍的输出jsp标记正文的方式不一样。前者的输出是先由jsp引擎解释,这里是在jsp标记处理程序中直接输出到给浏览器。

另外,在doAferBody中返回SKIP_BODY,表示终止标记正文处理;若返回的是EVAL_BODY_TAG,将会再一次调用doAferBody方法,重新处理标记正文,直到返回SKIP_BODY为止。

示例:

→标记处理程序片:

//下面的程序片将调用一个filter方法,此方法用于把jsp正文中的字符< > “ & 分别用&it;  &gt;  &guot;  &amp;来代替。以使浏览器按字符原样输出,不进行解释。

public class FillterTag extends BodyTagSupport {

       public  int doAfterBody() {

          BodyContent body=getBodyContent();

        String filteredBody=ServletUtilities.filter(body.getString()); //将正文得到的字符串过滤

    Try {

       JspWriter out=body.getEnclosingWriter();

out.print(filteredBody); //输出过滤后的文本

}catch(IOException ioe) {

        System.out.println(“Error in FilterTag: “ + ioe);

}

return(SKIP_BODY); //终止jsp正文处理

              }

→标记符描述文件片

   …

  <tag>

  <name>filter</name>

  <tagclass>tags.FilterTag</tagclass>

  <bodycontent>JSP</bodycontent>

  </tag>

    …

→jsp文件片

   <csajsp:filter>

  <STRONG>I love you!</STRONG><BR>

  <EM>I love you!<EM>

  </csajsp:filter>

  这样,在浏览器中输出的标记正文应当是

<STRONG>I love you!</STRONG><BR>

<EM>I love you!<EM>

 而不是

 I love you!

 I love you!

  ⑶使用jsp嵌套标记。

     可以对多个JSP标记进行嵌套引用,这样子标记就可以访问和存储父标记的数据和方法。

        子标记访问父标记需要使用BodyTagSupport类中的 findAccetorWithClass方法。注意它只能查找临近的父标记。

     假如在jsp文件中如下的嵌套引用:

     <!- - 此嵌套标记模拟条件判断- ->

     <csajsp:if>

      <csajsp:condition>true</csajsp:condition>

      <csajsp:then>Condition was true</csajsp:then>

      <csajsp:else>Condition was false</csajsp:else>

     </csajsp:if>

     相应的标记处理程序片:

     →对于if标记,执行类如下:

     public class IfTag extends TagSupport {

          private boolean condition ;

        private Boolean hasCondition = flase ;

        public void setCondition(Boolean condition) { //设置判断条件的真假;condition子标

//记调用

                  this.condition = condition ;

                  hasCondition = true ;

        }

public Boolean getCondition() {           //获取判断条件的真假then 、else子标

//记调用

                  return(condition) ;

              }

              public void setHasCondition(Boolean flag) {  //判断if标记后是否存在条件,由

//condition子标记调用

                  this.hasCondition = flag ;

              }

              public Boolean getHasCondition() {         //获取是否存在判断条件的信息,由

//then、else标记调用

                  return(hasCondition) ;

              }

              public int doStartTag() {

                  return(EVAL_BODY_INCLUDE)      //包含子标记

              }

        }

 

→那么对于condition等其它子标记的处理程序,需要获取父标记处理程序对象:

IfTag  parent=(IfTag)  findAncestorWithClass(this,IfTag.class)

之后就可以操作父标记处理程序的相应方法。

示例:(对于condition标记)

public class IfConditionTag extends BodyTagSupport {

    ifTag parent = (IfTag)findAncestorWithClass(this,IfTag.class); //获取父标记对应的对象

If (parent = = null) {

       Throw new JspTagException(“condition not inside it”);

}

return(EVAL_BODY_TAG);

}

 

public int doAfterBody() {

       ifTag parent = (IfTag) findAncestorWithClass(this , IfTag.class) ;

    String bodyString = getBodyContent() . getString() ;

    If (bodyString.trim().equals(“true”)) {

           Parent.setCondition(true)           //访问父标记处理类中的方法

    }else {

           parent.setCondition(false) ;

    }

return(SKIP_BODY) ;

}

}

其余标记类和此相似。

4.  小结

对于一些不太复杂和功能单一的逻辑描述,需要传递的参数要求不高时,使用JSP标记,要方便的多。对于大多数的商业逻辑应用,还是使用bean要好的多,也宜于servlet控制。

 

这个东东是俺学习 人邮 出的Servletlet与JSP核心技术》时随手写下的。里面的程序还没具体配置过。过段时间弄了再搞篇实验体会吧。

有什么值的商讨的发email哦。ginkou@163.com

1.JSP——动作标记(掌握怎样在JSP页面中使用include标记动态加载文件,使用forward动作标记实现页面的转向) one.jsp的具体要求 要求one.jsp页面有一个表单,用户使用该表单可以输入一个1-100之间的整数,并提交给本页面,如果输入的整数在50-100之间(不包括50)就转向three.jsp;如果 在1-50之间(包括50)就转向two.jsp如果输入不符合要求的整数,就转向error.jsp。 要求forward标记在实现页面转向时,使用param字标记将整数传递到转向的two.jsp或... 阅读详情

相关推荐

JSP标记学习笔记浅析 后端

在上面的示例中,我们使用了一个JSP表达式标记"",它会在页面上输出当前的日期和时间。在上面的示例中,我们定义了一个名为"greet"的Java方法,该方法接受一个名字作为参数,并返回一个问候语字符串。在上面的示例中,我们使用"jsp:forward"行为标记将请求转发到名为"welcome.jsp"的页面。在上面的示例中,我们声明了两个变量"name"和"age",并为它们赋予了相应的值。除了表达式标记外,JSP还提供了其他类型的标记,包括声明标记、脚本标记和行为标记。“的形式出现,其中”…

BugTO的博客 167

struts自定义标签

自定义标签必须实现下面三个接口中的一个:Tag、IterationTag、BodyTag 1.Tag如果要实现这个接口,可以通过扩展TagSupport这个类,来写自己需要的方法,而不需要把Tag接口中的所有方法实现。Tag接口的方法:doStartTag()、doEndTag()、getParent()、setParent()、release()、setPageContext()

北冥有鱼 其名为鲲 化而为鸟 其名为鹏 700

CentOS7下OpenVPN Access Server 2.12.0安装与智能分流配置指南

本文详细介绍了在CentOS7系统上安装OpenVPN Access Server 2.12.0并进行智能分流配置的完整指南。从环境准备、核心安装到智能分流策略的深度配置,提供了经过验证的优化方案和故障排查技巧,帮助用户实现高效的VPN网关部署和流量管理。

weixin_30546189的博客 289

jsp嵌套标签

嵌套标记 当一个标记完全被另一个标记包围时,就说它是 嵌套的。 &lt;outer:tag&gt;&lt;inner:tag/&gt;&lt;/outer:tag&gt; 将一个标记置于另一个标记之内无需特殊的设置或编码。可以在一个地方嵌套标记也可以在另一个地方嵌套标记本身。当然,有些标记设计成嵌套在其它标记内,但是却不需要任何东西来将标记显式地声明成是可嵌套的。 可以将 H...

netliving的专栏 520

Gartner DSG数据安全治理 架构及解读

目录背景:架构图: 解释:英文解释:(自上而下)平衡业务与风险、威胁、合规之间的关系(5个维度之间的平衡)优先处理数据集制定安全策略实施安全工具策略配置同步从上到下,从需求调研开始实施数据安全治理。千万不要跨过数据摸底、治理优先级分析、制定治理整体策略,而直接从技术工具开始对数据安全进行治理。 先明确选择需要治理的对象,优先选择重要数据进行数据安全治理工作。可以通过数据梳理、分类分级等手段,完成数据资产盘点和筛选,在纷杂的数据中理清头绪。

锦慈的技术博客 7216

OpenMV识别颜色源码

【代码】OpenMV识别颜色源码。

dxt258013的博客 403

jsp tag rtexprvalue解释

rtexprvalue的全称是 Run-time Expression Value, 它用于表示是否可以使用JSP表达式 该值是tab标签里面的属性 xxx false xxxx 当其值为true的时候,标示可以使用jsp表达式动态设置属性的值 为false表示,不能动态设置属性的值 findAncestorWithClass (from,Tag.c

skydar的专栏 1990

游戏开发实战:用UE4 Marschner模型打造次世代头发渲染(附Shader代码解析)

本文详细解析了如何在UE4中使用Marschner模型实现次世代头发渲染,包括Shader代码逐行解读与参数调优。通过对比传统Kajiya-Kay模型,展示了Marschner模型在物理精确性和视觉效果上的优势,并提供了性能优化与实战技巧,帮助技术美术师提升游戏角色渲染品质。

weixin_28223453的博客 240

jsp指令标记

目录。

m0_71822198的博客 887

川崎机器人 AS语言基础运动指令表

    功能简介 动作方式 参考坐标系 位置特性 X,Y,Z 角度特性 O,A,T 指令格式(距离单位毫米,时间单位秒,角度单位度 示例1 示例2 运 动 指 令 JMOVE 以关节移动到目标点 关节移动方式 基础坐标系 不受控 伪随机动作 JMOVE 目标点 JMOVE #yd JMOVE put1 LMOVE 以直线移动到目标点 直线移动方式

喜欢自学并分享经验的技术宅 9350

点云目标检测:open3d多窗口联动可视化

多个模型之间的对比除了指标之外,还需要可以直接直观的对比可视化结果,这次介绍一下如何使用open3d同时打开两个窗口分别加载两个模型的结果进行对比,同时实现两个窗口的联动,也就是当一个窗口拖动或者缩放时另外一个窗口也跟着做同样的变换。

zhaoguanhua的博客 4688

JSP中指令标识都有什么呢?

指令表示语法格式如下: <%@ 指令名 属性1="属性值1"属性2="属性值2".....%> 注意:“<%@”与“%>”是完整的标记,中间不能加空格,但是标签中定义的属性与指令名之间是有空格的。 JSP中指令标识如下: 指令 page指令 include指令 taglib指令 1.page指令 page是JSP页面最常见的指令,用于定义整个JSP页面的相关属性,这些属性在JSP中被服务器解析成Servlet时会转换为相应的Java代码。pag.

qq_50812489的博客 3740

BGP路由聚合:自动聚合和手动聚合

路由聚合是指将多条具体的路由合并为一条聚合路由,以减少路由表的条目数。这种技术通过只向对等体发送聚合后的路由,而不发送所有的具体路由,来减小路由表的规模。同时,被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

网络技术联盟站 1220

JSP脚本指令及标记学习笔记

好久没更新文章了,上次更新的文章还是一个学习笔记。本篇博文介绍的是JSP基本概念

执念斩长河 597

Python 爬虫项目:爬取百度贴吧帖子,保存标题与评论内容

在 Python 爬虫技术的学习与实战体系中,贴吧类动态内容爬取是典型的入门进阶案例,百度贴吧作为国内主流的社区论坛平台,其页面结构规范、数据载体清晰,非常适合用于巩固爬虫核心技术栈。本次实战项目基于requests请求库与解析库实现完整的爬取流程,从网页请求、数据解析、内容提取到本地持久化存储全链路落地,既能掌握基础爬虫的核心逻辑,也能理解网页结构化数据解析的通用思路,同时规避爬虫常见的反爬基础策略,具备极高的实战参考价值。本文核心价值。

2503_91057718的博客 2543

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JSP标记学习笔记浅析

1.概述 1)什么是JSP标记 顾名思义,JSP标记就是在JSP文件中使用的标记。它类似于html语法中的标记,像head、table。通过在JSP文件中引用它(就像使用html标记那样),可以更方便的实现对Java代码模块的重用。 2)为什么要使用JSP标记技术(与javabean相比) 好处: JSP标记可以处理JSP正文的内容,比如改变文本显示样式;而jav...

weixin_33859504的博客 168

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JSP标记学习笔记 (转)

JSP标记学习笔记 (转)[@more@] JSP标记学习笔记XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" /> g...

csd3176的博客 125

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JSP常用标记——(web基础学习笔记)

include指令标记 语法: <%@ include file="文件的URL" %> 目的:在jsp页面内某处整体静态嵌入一个文件。include指令可以实现代码的复用。 要求:文件编码与当前JSP页面一致 文件必为可使用或可访问的 文件与jsp页面同一web服务目录则URL直接为文件名 注意:使用page contentType=”所在web目录位置”可能会导致与原jsp页面的page指令产生冲突,因为jsp页面的page指令只能为con...

Sabrina0807的博客 1558

JSP自定义标记taglib学习笔记

一、什么是Taglib? 标记库(tag library),是指由在JSP页面中使用的标记所组成的库。JSP容器推出时带有一个小型的、默认的标记库。而自定义标记库是为了某种特定的用途或者目的,将一些标记放到一起而形成的一种库。在一个团队中协同工作的开发者们可能会为各自的项目创建一些非常特定化的自定义标记库,同时也会创建一个通用自定义标记库,以供当前使用。 标准的JSP 标记可以调用JavaBea

Wiinder的博客 5847

学习笔记------jsp页面与jsp标记

2.1 在<%! %>标记符号之间声明变量和方法,在jsp的整个页面都有效。 2.2 在<% %>标记符号之间插入java程序片。java程序片按顺序执行,而且某java程序片中声明的局部变量在jsp页面后续的所有java程序片及表达式部分内都有效。 2.3 在<%= %>标记符号之间插入一个表达式。(注意:不可插入语句) 2...

weixin_33831673的博客 184

jsp页面中 img标记的 onload_JavaScript-学习笔记(6):动态创建标记

本文使用 Zhihu On VSCode 创作并发布网页的结构由标记语言创建,js 可用来改变细节而不改变结构。 同样,js 也可用来改变网页的结构和内容。传统方法document.write: write方法可以把字符串插入到文档里。 使用方法,编辑 test.html 文件:<body> <script> document.write("<p> ...

weixin_42356475的博客 658

Tag文件与Tag标记——[JSP]8

Tag文件 Tag标记 Tag文件中的常用指令 attribute指令 Tag文件中的常用指令 Tag文件中的常用指令 taglib指令

ormstq的博客 3219

jsp的指令标记有哪些_JSP指令标记

jsp的指令标记有哪些 JSP指令标记 (JSP Directive Tag) Directive Tag gives special instruction to Web Container at the time of page translation. Directive tags are of three types: page, include and taglib. 指令标记在页...

cunfen6312的博客 2088

JSP指令标记和动作标记

1.jsp <!-- JSP指令标记:page指令。language,import属性。 --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*,java.io.*"%> <!-- JSP指令标记:include指令。 --> <%@ include file="Hel

苦涩精灵的博客 1333

3.JSP动作标记和指令标记

一、指令标记 1、page指令标记 page指令用来定义整个jsp页面的一些属性和这些属性的值,属性值用单引号或者双引号括起来 page语法格式: <%@ page 属性1= “值1” 属性2=“值2” …%> page指令标记可以指定如下属性的值:contentType、import、language、session、buffer、autoFlaush、isThreadSafe、pageEncoding contentType属性 contentType属性值可取:text/html(

le000426的博客 3877
上一篇: JDBC对数据库的事务操作
itpride
博客等级 码龄25年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值