深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会

转载自   深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会

 自定义标签,顾名思义,就是自己定义的标签。那么我们为什么要自己定义一些标签呢?

我们知道,如果要在JSP中获取数据我们可以采用通过JSP的隐式对象request来获取相应的请求参数或者属性,也可以通过脚本<%  Java  代码%>来进行相应的处理,当然还可以使用EL表达式进行相关数据的操作。

         这里,我们主要来谈一下在JSP中使用自定义标签。那么我们为什么要自定义一些标签呢?我们知道,JSP中标签的使用使得Web应用的显示层与业务逻辑层分开。在JSP使用标签,可以移除JSP中的java代码使得JSP页面更加的整洁和便于维护。然而,在JSP中定义的一些标签又是有限的或者是我们所不需要的,这时,我们就可以同过自定义标签的形式将相应的操作封装在标签中,只需在JSP中调用相应的标签即可。这样就简化了我们的JSP页面也便于页面操作人员维护了。下面,我们就来了解一下自定义标签、如何定义自己的标签,以及在JSP中如何引用自己定义的标签。

 

 一、自定义JSP标签概述

        自定义JSP标签就是程序员定义的一种JSP标签,这种标签把那些信息显示逻辑封装在一个单独的Java类中,通过一个XML文件来描述它的使用。当页面中需要使用类似的显示逻辑时,就可以在页面中插入这个标签,从而完成相应的功能。

       使用自定义标签,可以分离程序逻辑和表示逻辑,将Java代码从HTML中剥离,便于美工维护页面;自定义标签也提供了可重用的功能组件,能够提高工程的开发效率。

自定义标签主要用于移除Jsp页面中的java代码。

 

二、自定义JSP标签的执行过程

         当一个含有自定义标签的JSP页面被JSP引擎(Web容器)转译成Servlet时,JSP引擎遇到自定义的标签,会把这个自定义标签转化成对一个称为“标签处理类”的调用。之后,当这个JSP页面被执行时,JSP引擎就会调用这个“标签处理类”对象,并执行其内部定义的相应操作方法,从而完成相应的功能。

    


 
    三、自定义JSP标签的开发流程

           使用Java处理类来开发自定义JSP标签时,主要分为下几个步骤:

创建标签的处理类(Tag Handle Class)。这个类实现Tag接口,用来定义标签的行为,并在JSP引擎遇到自定义标签时调用执行。

     创建标签库描述(tld)文件(Tag Library Descriptor File),在tld文件中对标签处理器类进行描述。

       在JSP文件中用taglib指令引入标签库,然后使用标签库描述文件中指定的标签名来使用它。

 

四、创建标签的处理类、创建标签库描述文件、用taglib指令引入标签库

1. 创建标签的处理类

         要想定义自己的标签,必须要定义一个实现了Tag接口或是继承实现了改接口的子类的类(这里,我们主要通过继承实现了Tag接口的TagSupport类来介绍),然后把相应的操作封在相应的方法中即可。

例:

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class CustomTagIP extends TagSupport {}

2. 创建标签库描述文件

            定义标签库文件其实就是定义一个用于描述标签处理类和JSP文件之间关系的一个扩展名为”.tld”的文件。标签库描述符文件是一个以“.tld”结尾的标准XML文档,用来记录一个标签库内拥有哪些标签、每个标签包含哪些属性等。

注:这个 ”.tld”文件一定要放在WEB-INF文件夹下否则在JSP解析引擎将JSP文件解析成Servlet时会因所要解析的自定义标签找不到对应的标签处理类而导致该处理类无法被加载而产生错误。

 例:

<?xml version="1.0" encoding="UTF-8"?>
//XML声明
<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/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
//指明改文件中所使用的标签的名称空间以及其//约束文件所在的具体位置<taglib>为改文件的根标签
<description>A tag library exercising SimpleTag handlers.</description>
//这是<description>:标签库的一个文本描述
<tlib-version>1.0</tlib-version>
//<tlib-version>:指定标签库的版本为1.0
<short-name>lijizh</short-name>
//<short-name>:为标签定义简短的名字,在taglib
//指令中可作为首选的前缀名使用。
<uri>http://www.hbsi.com</uri>
//<uri>:定义一个URI,用于唯一的标识此标签库。(可根据需要自定义)
<tag>
//<tag>:用于指定自定义标签的相关信息。<description>OutputsHello, World</description><name>H</name>//<name>紧跟在前缀明后的标签名<lijizh:H><tag-class>www.hbsi.web.tag.CustomTagIP</tag-class>
//<tag-class>指明创建标签处理类的具体位置<body-content>empty</body-content>
//<body-content>指明自定义标签体的内容的类型具体可/
//为:EMPTY JSP  scriptless  tagdepentend</tag>//结束标签
</taglib>

还有一些其他的标签的介绍:

<display-name>:为标签库指定一个简短的别名。

<small-icon>:为标签库指定大小为16×16的小图标(gif或jpeg格式),该图标可在图形界面工具中显示。

<large-icon>:为标签库指定大小为32×32的大图标(gif或jpeg格式),该图标可在图形界面工具中显示。

<validator>:为标签库提供一个验证器。

<listener>:为标签库提供一个监听器。

<tag-file>:用于描述标签文件。

<function>:用于指定在表达式语言中使用的函数

3. 用taglib指令引入标签库

     虽然在上面已经定义好了标签处理类和相应的库描述文件但是要想在JSP中使用自定义标签还需要使用JSP中的指令原素进行引用才可使用。

例:

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.hbsi.com"prefix="lijizh" %>
<html> <body><lijizh:H>SKIP_PAGEThis is my JSPpage. <br></lijizh:H>aaaaaaaa<br/></body>
</html>

再综合来看一个具体的实例:

  使用标签输出客户机IP

1、标签处理类:

package www.hbsi.web.tag;import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;publicclass CustomTagIP extends TagSupport {@Overridepublicint doStartTag() throwsJspException {HttpServletRequest request =(HttpServletRequest) this.pageContext.getRequest();//同过this.pageContext获取一个PageContext类型的对象//通过该对象可以调用其他八大隐式对象JspWriter out = this.pageContext.getOut();try {out.println(request.getRemoteAddr());} catch(IOException e) {throw new RuntimeException(e);}return  this.EVAL_BODY_INCLUDE;// doStartTag()根据这个返回值来进一步确定是否显示//标签体中的内容。其中,returnthis.SKIP_BODY;忽略标签体中的内容不执行;returnthis.EVAL_BODY_INCLUDE;显示标签体中的内容。}}

2.定义标签描述库

<?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/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"version="2.0"><description>A taglibrary exercising SimpleTag handlers.</description><tlib-version>1.0</tlib-version><short-name>lijizh</short-name><uri>http://www.hbsi.com</uri><tag><description>index.jsp</description><name>H</name><tag-class>www.hbsi.web.tag.CustomTagIP</tag-class><body-content>empty</body-content></tag></taglib>

  3.JSP文件中引用自定义标签

<%@ pagelanguage="java" import="java.util.*"pageEncoding="UTF-8"%><%@ taglib uri="http://www.hbsi.com"prefix="lijizh" %><html><body>您当前的IP地址是<br><lijizh:H/></body></html>

  效果如图:

   

         这样你就可以在JSP中使用自定义标签来封装自己的Java代码了。自己试一试吧!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ps查看所有php进程,ps命令就是最基本进程查看命令

1、ps是什么&#xff1f;要对进程进行监测和控制&#xff0c;首先必须要了解当前进程的情况,也就是需要查看当前进程&#xff0c;ps命令就是最基本进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等…

如何测试微信应用号

每一次微信的动作都是商机&#xff0c;而随着微信应用号的即将面世&#xff0c;微信应用号的开发和测试又会成为一股新的风向。 其实经常有人问到微信服务号或者微信订阅号怎么测试的相关内容&#xff0c;可能总觉得比较缺乏技术含量不太想说&#xff0c;这次看了下应用号&…

git 拉代码

git clone 。。 拉取代码master git clone -b 分支名 。。。 拉取分支名 git——更新分支、提交代码、切换分支、合并分支 还是直接贴教程吧&#xff1a;https://git-scm.com/book/zh/v2 如何把本地idea上的项目上传到github上&#xff1a;https://www.cnblogs.com/…

javaweb学习总结(二十四)——jsp传统标签开发

转载自 javaweb学习总结(二十四)——jsp传统标签开发一、标签技术的API 1.1、标签技术的API类继承关系二、标签API简单介绍 2.1、JspTag接口JspTag接口是所有自定义标签的父接口&#xff0c;它是JSP2.0中新定义的一个标记接口&#xff0c;没有任何属性和方法。JspTag接口有Tag…

二级导航 sql php,帝国cms栏目导航调用之SQL语句调用一级栏目和二级栏目的方法...

帝国cms调用一级栏目及下面的二级栏目调用方法如下&#xff1a;SQL语句<?php $ecms_bq_sqlsys_ReturnEcmsLoopBq("select * from [!db.pre!]enewsclass where bclassid0 order by myorder limit 6",14,24,0);$bqno0;while($bqr$empire->fetch($ecms_bq_sql)){…

Java开发利器:IntelliJ IDEA的安装、配置与使用

1.尚硅谷-IDEA-IntelliJ IDEA的介绍和优势 2.尚硅谷-IDEA-版本介绍与安装前的准备 3.尚硅谷-IDEA-IDEA的卸载 4.尚硅谷-IDEA-IDEA的安装 5.尚硅谷-IDEA-安装目录和设置目录结构的说明 6.尚硅谷-IDEA-启动IDEA并执行HelloWorld 7.尚硅谷-IDEA-Module的使用 8.尚硅谷-IDEA…

开发者的利器:Docker 理解与使用

困扰写代码的机器难免会被我们安装上各种各样的开发工具、语言运行环境和引用库等一大堆的东西&#xff0c;长久以来不仅机器乱七八糟&#xff0c;而且有些相同的软件还有可能会安装不同的版本&#xff0c;这样又会导致一个项目正常运行了&#xff0c;却不小心破坏了另一个项目…

php环境搭建sqlserver,ThinkPHP5.0/5.1对接SQLServer数据库(宝塔环境)

SQLServer实际上是mssql&#xff0c;想要使用thinkphp的Db对象操作数据库前必须要在服务器上安装对应的扩展。宝塔面板的PHP安装路径为/www/server/php/ 且支持多个PHP版本共存&#xff0c;所以安装PHP扩展的方法与网上那些示例略有不同。下面是 PHP7.2 安装 pdo_sqlsrv5.6.0 扩…

<c:set>标签

转载自 <c:set> 标签 JSP 标准标签库 <c:set>标签用于设置变量值和对象属性。 <c:set>标签就是<jsp:setProperty>行为标签的孪生兄弟。 这个标签之所以很有用呢&#xff0c;是因为它会计算表达式的值&#xff0c;然后使用计算结果来设置 JavaBean 对…

layUI 日期组件单独使用 并且放大

日期类型 选择 layuI 的date 类型单独使用 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>layDate快速使用</title><link rel"stylesheet" href"/layui/css/layui.css" media"all…

Opserver开源的服务器监控系统(ASP.NET)

Opserver是Stack Exchange下的一个开源监控系统,系统本身由C#语言开发的ASP.NET&#xff08;MVC&#xff09;应用程序&#xff0c;无需任何复杂的应用配置&#xff0c;入门很快。下载地址&#xff1a;https://github.com/opserver/Opserver。据说&#xff0c;国内腾讯公司内部也…

jsp页面中JSTL/EL标签引用java后台静态static字段的方法总结

转载自 jsp页面中JSTL/EL标签引用java后台静态static字段的方法总结为什么使用该功能&#xff1f;项目中的每个页面都包含产品名称、Logo、版本等信息&#xff0c;我希望修改一处&#xff0c;其它所有的全部跟着变。 有同学会说那就都引用一个页面“”就Ok了&#xff1b;但是…

c 管理信息系统mysql,输入数据并输出信息的系统都称为()。A、信息系统B、数据库系统C、事务处理系统D、管理信息系统...

关于葡萄糖重吸收的叙述&#xff0c;错误的是()。A.只有近球小管可以重吸收B.与Na&#xff0b;的重吸收相耦联C.是一种主肌力评定时错误的做法是A、应使患者配合B、患者应适当去除衣物C、应检查涉及的所有关节D、应增加协同当使用竹笆脚手板时&#xff0c;纵向水平杆与横向水平…

一位跨平台开发者的自白

Andreia Gaita[1] 在 OSCON 开源大会上发表了一个题为跨平台开发者的自白[2]的演讲。她长期从事于开源工作&#xff0c;并且为Mono[3] 工程&#xff08;LCTT 译注&#xff1a;一个致力于开创 .NET 在 Linux 上使用的开源工程&#xff09;做着贡献&#xff0c;主要以 C#/C 开发。…

JS (intermediate value).Format is not a function问题解决

JS (intermediate value).Format is not a function问题解决 前言 最近项目遇到一个问题&#xff0c;就是在javascript中使用new Date().Format("YYYY-mm-dd")的时候&#xff0c;会出现报错现象&#xff0c;直接导致界面无法正常显示。下面为大家解答一下。 问题详情…

java程序大笨钟怎么打,L1-018.大笨鍾(Java)PAT團體程序設計天梯賽-練習集

微博上有個自稱“大笨鍾V”的家伙&#xff0c;每天敲鍾催促碼農們愛惜身體早點睡覺。不過由於笨鍾自己作息也不是很規律&#xff0c;所以敲鍾並不定時。一般敲鍾的點數是根據敲鍾時間而定的&#xff0c;如果正好在某個整點敲&#xff0c;那么“當”數就等於那個整點數&#xff…

JSP JavaBean

转载自 JSP JavaBeanJSP JavaBean JavaBean是特殊的Java类&#xff0c;使用J ava语言书写&#xff0c;并且遵守JavaBean API规范。 接下来给出的是JavaBean与其它Java类相比而言独一无二的特征&#xff1a; 提供一个默认的无参构造函数。需要被序列化并且实现了Serializable接…

layui 单独使用日期组件

<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>layDate快速使用</title><link rel"stylesheet" href"/layui/css/layui.css" media"all"><style type"text/css"…

JSP中的EL表达式详细介绍

转载自 JSP中的EL表达式详细介绍一、JSP EL语言定义EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算。JSP 2.0 将 EL 表达式添加为一种…

php如何直接使用iview,iview安装使用

iView 是一套基于 Vue.js 的开源 UI 组件库&#xff0c;主要服务于 PC 界面的中后台产品。安装cd 项目cnpm install iview -S在项目中引入iview 在入口文件main.js中配置import iView from iviewimport iview/dist/styles/iview.cssVue.use(iView)官网示例{{ message }}export …