JSP自定义标签Taglib实现过程重点总结
发布时间:2024-03-15 23:49:46
Taglib指令介绍
Taglib指令,其实就是定义一个标签库以及自定义标签的前缀。
比如struts中支持的标签库,html标签库、bean标签库、logic标签库。
其中的具体的实现方式,我们不过多介绍,我们给大家从宏观的角度以及解决其中的疑难点,后面会大家介绍相应的学习资料。
除了struts的标签库,我们常见还有jstl标签库。
这样在界面jsp中引入其中的标签库或者标签库文件,然后才可以正常使用其中定义的标签。
<%@ taglib prefix ="bean" uri= "http://struts.apache.org/tags-bean" %>
<%@ taglib prefix ="logic" uri= "http://struts.apache.org/tags-logic" %>
<%@ taglib prefix ="html" uri= "http://struts.apache.org/tags-html" %>
<%@ taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>
自定义标签库优点
在jsp1.1版本中就增加了自定义标签库。自定义标签库可以看作一种优秀的组件。在自定义标签库中,我们可以把复杂的业务逻辑功能都封装在标签库中了。而不必在jsp中写具体的代码。这样,jsp代码与java编码能力不必强制耦合在一起。
提到jsp版本的问题,我们首先应该确定我们jsp版本,因为版本不同,标签库文件引入的头文件不同,并且其中的标签也有差异。
如何查看我们使用的jsp版本或servlet版本
打开tomcat下lib文件下的jsp-api.jar下的/META-INF/MANIFEST.MF文件,查看jsp版本。
因为我已经导入eclispe中,图如下:
lib文件下的servlet-api.jar下的/META-INF/MANIFEST.MF文件,查看servlet版本
因为我已经导入eclispe中,图如下:
Jsp2新增的特性
上述图中jsp版本是2.2,servlet版本是3.0。目前servlet3.0对应的是jsp2.2规范,但是一般情况下,我们把jsp2.0与jsp2.2都统称为jsp2.
如果我们使用jsp2,则web.xml使用的是servlet2.4以上的版本。那我们看一下web.xml对应的头文件:
新增的特性是:
<web-app version= "4"
xmlns="http://javasuncom/xml/ns/j2ee"
xmlns:xsi="http://wwwworg/2001/XMLSchema-instance"
xsi:schemaLocation="http://javasuncom/xml/ns/j2ee
http://javasuncom/xml/ns/j2ee/web-app_2_xsd" >
</web-app>
1.直接配置jsp的属性
比如在web.xml中配置:
< jsp-config>
<jsp-property-group >
<!-- 对那些文件进行应用 -->
<url-pattern >* jsp</ url-pattern>
<!-- 忽略el表达式 -->
<el-ignored >true </el-ignored >
</jsp-property-group >
</ jsp-config>
当然还有很多功能:
2.表达式语言
表达式语言,就是使用el表达式。
3.使用TagFile
使用TagFile可以代替标签处理类和库文件。
jsp1和jsp2的标签库文件中的头文件
jsp1的标签文件的头文件:
<?xml version="0" encoding= "UTF-8"?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc//DTD JSP Tag Library 1//EN"
"http://javasuncom/j2ee/dtds/web-jsptaglibrary_1_dtd">
根据后缀dtd,知道这是引入dtd文件,但是这具体表示什么意思呢?
若是引入dtd文件,则使用DOCTYPE 这种形式。但是 PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"是什么意思呢?
根据xml中,如何引入dtd文件?引入dtd文件有以下形式:
1.在xml文档内部引入dtd
<?xml version="0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
2.在xml文档引入外部dtd文件
<?xml version="0"?>
<!DOCTYPE note SYSTEM "notedtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
在文档类型声明时,用管间质SYSTEM或PUBLIC来指出外部DTD文件的位置
用system关键字,如下:<!DOCTYPE 根元素的名字 SYSTEM "外部DTD文件的URI">
用public如下:<!DOCTYPE 根元素的名字 PUBLIC "DTD的名字" "外部DTD文件的URI">
一般用system关键字来形容是私有的dtd文件。
而public关键字来形容的是公共的dtd文件。public形式,首先默认的根据dtd的名字来寻找dtd文件,找不到,则会根据dtd文件的uri寻找文件。
jsp2中标签文件的头文件如下:其中是使用的schema形式而不是dtd文件。
<?xml version="0" encoding="UTF-8" ?>
<taglib xmlns="http://javasuncom/xml/ns/j2ee"
xmlns:xsi="http://wwwworg/2001/XMLSchema-instance"
xsi:schemaLocation="http://javasuncom/xml/ns/j2ee http://javasuncom/xml/ns/j2ee/web-jsptaglibrary_2_xsd"
version="0"></taglib>
标签库文件位置
把tld文件放在WebContent目录下或其子目录下。这样的话,web.xml不用配置其位置即可。tomcat直接读取webcontent下的tld文件。
猜你喜欢
- Django原生的TextField并不友好,集成TinyMCE富文本编辑器Django版本:1.11.5TinyMCE版本:4.6.7第一
- import osimport sysimport MySQLdbdef getStatus(conn):  
- Pygame是跨平台Python模块,专为电子游戏设计,包含图像、声音。建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言
- 成功解决NLTK包的安装错误创建环境NLP_Pre_trainl环境conda create -n NLP_Pre_train python
- 一、Visdom简介Visdom是由Facebook公司开发的一个进行数据可视化的Web应用程序,支持Torch、Numpy、Pytorch
- 最近开始学Python,想直接通过命令行的方式进行学习。奈何没有Tab补全,操作实在麻烦,网上各种百度后无果(x64系统,x86的可以直接下
- 主题众所周知,django.forms极其强大,不少的框架也借鉴了这个模式,如Scrapy。在表单验证时,django.forms是一绝,也
- 实现了简单版本的logging.config,支持一般的通过config文件进行配置。感觉还有更好的方法,是直接利用logging.conf
- Go语言没有继承、构造函数和析构函数等概念,但是它是面向对象的。.net中类型系统分为值类型和引用类型,两种转换需要进行装箱和拆箱,都是继承
- MVC模式MVC, 全名Model View Controller, 是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Mo
- 1. 事务的 ACID 特性详ACID 是为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(Atomicity
- 一、设计目的1、教学目的本课程设计是学生学习完《Python程序设计》课程后,进行的一次全面的综合训练,通过课程设计,更好地掌握使用Pyth
- import csvfor line in open("test.csv"):name,age,birthday = l
- 我就废话不多说了,直接上代码吧!#2.14from turtle import *from time import sleepdef go_
- 我想从文件读数据的话,要比直接从数据库快一些吧(个人观点),昨天测试了读出6000条新闻,读数据库用了23579毫秒,读文件只用了123毫秒
- Python 内置的 zipfile 模块可以对文件(夹)进行ZIP格式的压缩和读取操作。要进行相关操作,首先需要实例化一个 ZipFile
- 官方其实已经给出了方案,只不过藏的有点深,在加上网上有很多不太靠谱的帖子误导了我(当然不排除我没理解的原因哈)。所以为了让有些朋友的少走点弯
- 目录外键(Foreign Key)如何确定表关系如何建立表关系一对多关系 - 员工表和部门表多对多一对一表关系总结外键(Foreign Ke
- Python判断变量是否已经定义是一个非常重要的功能,本文就来简述这一功能的实现方法。其实Python中有很多方法可以实现判断一个变量是否已
- ‘Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [Microsoft][O