`
mytream
  • 浏览: 73198 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java Web基础——自定义标签和JSTL

阅读更多

 

因为在Struts2中使用到了很多该框架的自定义标签的使用,所以在此特别梳理了一下有关的知识体系


标签(动作)的一般语法为:<prefix:标签名 属性表列>,如<jsp:include page="copyright.jsp" />,该标签的作用是把copyright.jsp页面的输出包含到当前页面的输出中

我们先来看一下常用的标准JSP动作动作指令,又可以叫做标签指令:

  • jsp:include 在当前页面包含另一个页面的输出
  • jsp:forward 将请求转发到指定的页面
  • jsp:usebean 查找或者创建一个JavaBeans对象
  • jsp:setProperty 设置JavaBeans的属性值
  • jsp:getProperty 返回JavaBeans的属性值
  • jsp:plugin 在JSP页面嵌入一个插件(如Applet)

以上的这些标准标签是JSP中内置的,所以不需要特别的生命便可使用。当然我们也可以根据需要定义自定义标签以实现特定的效果,下面我将系统的介绍自定义标签的创建和使用流程:


所谓自定义标签就是用Java语言开发的程序的,以特定的格式在JSP页面中使用的标签,自定义标签又被叫做自定义动作(Custom Action)。

我们这里主要介绍如何利用JSP2.0中的扩展标签API进行开发,而不再介绍传统JSP1.x中标签的开发,JSP2.0中简单的自定义标签开发更加简洁和使用。

 



一.简单自定义标签API的层次结构

标签类层次结构
  • Jsp接口是一个接口,该接口没有定义任何方法,只起到接口表示和类型安全的作用
  • SimpleTag接口用来实现结点的自定义标签,接口中定义了5个生命周期方法,下面我们会详细介绍
  • SimpleTagSupport类实现了SimpleTag接口,并且还定义了另外三个方法

 

二.自定义标签的开发步骤

  • 创建标签处理类
  • 创建标签库描述文件TLD(Tag Library Discriptor)
  • 在JSP页面中引入标签库和使用标签

下面我们将创建使用一个实现将标签体打印五次的自定义标签,并在之后说明其相关原理。

标签处理类

  1. public class HelloTag implements SimpleTag {  
  2.   
  3.     JspContext context = null;  
  4.     JspTag parent = null;  
  5.     JspFragment jspBody = null;  
  6.       
  7.     @Override  
  8.     public void doTag() throws JspException, IOException {  
  9.         StringWriter sw = new StringWriter();  
  10.         jspBody.invoke(sw);  
  11.         String bodyContent = sw.toString();  
  12.         JspWriter out = context.getOut();  
  13.         for(int i=0;i<5;i++){  
  14.             out.println(bodyContent);  
  15.         }  
  16.     }  
  17.     @Override  
  18.     public JspTag getParent() {  
  19.         return parent;  
  20.     }  
  21.     @Override  
  22.     public void setJspBody(JspFragment jspBody) {  
  23.                 this.jspBody=jspBody;  
  24.         }  
  25.     @Override  
  26.     public void setJspContext(JspContext jspContext) {  
  27.         context = jspContext;  
  28.     }  
  29.     @Override  
  30.     public void setParent(JspTag parent) {  
  31.         this.parent = parent;  
  32.     }  
  33. }  

标签库描述文件 sampleLib.tld,放在WEB-INF或者其子文件夹中


  1. <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"  
  3.     version="2.0">  
  4.     <tlib-version>2.0</tlib-version>  
  5.       
  6.     <short-name>hello</short-name>  
  7.     <uri>/testPath</uri>  
  8.       
  9.     <tag>  
  10.         <name>hello</name>  
  11.         <tag-class>com.mytream.HelloTag</tag-class>  
  12.         <body-content>scriptless</body-content>  
  13.     </tag>  
  14. </taglib>  



 

在JSP页面中使用该标签

hello.jsp

  1. <%@ page contentType="text/html" %>  
  2. <%@ taglib prefix="test"  uri="/testPath" %>  
  3. <html>  
  4.   <head>  
  5.     <title>Test Custom Tag</title>  
  6.   </head>  
  7.   <body>  
  8.         <test:hello>good</test:hello>  
  9.   </body>  
  10. </html>  

访问hello.jsp页面,我们将会看到good被连续打印了5遍,这是我们在doTag()方法中所做的操作,当然该标签的解析过程要比这复杂的多,下面我讲一一介绍。

 

三.容器解析自定义标签的过程

解析自定义标签流程图
上图不一定符合UML规范,仅仅是为了帮助理解。从上图我们可以看到tomcat容器在对JSP页面进行转换的过程中,一旦遇到用户自定义的标签便要通过如上三步进行解析并执行该标签所代表的动作。
1.通过标签的前缀找到该标签所对应的uri,该uri并不表示资源的具体位置,而是通过它可以建立与TLD文件中所定义标签的映射。在WEB-INF/下的TLD文件中找到<tag>标签中的<name>对应的<tag-class>,
也就是需要创建的类的对象的名字。利用反射机制创建HelloTag的示例
2.调用HelloTag的setXXX()方法,根据JSP页面中属性对应的值对HelloTag对象的属性值进行设置,这样我们就可以在自己定义的这些类中使用这些属性值了
3.调用HelloTag的doTag()方法,执行用户定义的相关操作

四.使用标准标签库JSTL(JSP Standard Tag Library)

既然我们能够自定义标签,我们当然也能够使用已经定义好的其他好的标签。
JSTL为我们提供了庞大的标签库,使用JSTL可以提高开发的效率,参考之前自定义标签的操作,要使用JSTL标签要进行如下操作:
  • 从<CATALINA_HOME>\webapps\examples\WEB-INF\lib中将jstl.jar和standard.jar文件复制到自己的项目中的WEB-INF\lib目录中
  • 在使用JSTL标签前进行声明,即用taglib指令来引用标签库,如<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • 使用,如<C:out value="Welcome to using JSTL" />将会输出Welcome to using JSTL.
JSTL相当庞大,共提供了5个库,如下表所示
JSTL库及使用的URI与前缀
库名称 使用的URI 前缀
核心标签库 http://java.sun.com/jsp/jstl/core c
XML标签库 http://java.sun.com/jsp/jstl/xml x
国际化和格式化库 http://java.sun.com/jsp/jstl/fmt fmt
SQL标签库 http://java.sun.com/jsp/jstl/sql sql
函数库 http://java.sun.com/jsp/jstl/functions fn









至于如何使用JSTL标签库,有太多的参考资料了,暂时不再列叙
  • 大小: 2.6 KB
  • 大小: 13.3 KB
分享到:
评论

相关推荐

    《Java Web开发基础——从Servlet到JSP》源代码v1.0

    《Java Web开发基础——从Servlet到JSP》是一本深入探讨Java Web开发的教程,主要涵盖了从基础的Servlet到高级的JSP技术。这个压缩包包含的源代码是该书教学内容的实践部分,旨在帮助读者更好地理解和应用所学知识。...

    《Java Web开发教程——入门与提高篇(JSP+Servlet)》源代码

    《Java Web开发教程——入门与提高篇(JSP+Servlet)》是一本专注于Java Web技术的书籍,旨在帮助初学者和有一定基础的开发者深入理解JSP和Servlet在实际项目中的应用。源代码作为配套资源,提供了书中各章节的实例...

    Java Web开发实践教程——从设计到实现(第2版)源代码

    《Java Web开发实践教程——从设计到实现(第2版)》是一本深入浅出的教程,旨在帮助读者掌握Java Web应用的开发技术。源代码是学习编程书籍的重要辅助资源,它提供了书中示例的直观展示,使得理论与实践相结合,...

    SCWCD之路——标准标签库开发

    "SCWCD之路——标准标签库开发"是一个关于Java Web开发中的重要主题,特别是与Servlet、JSP和自定义标签库相关的知识。SCWCD(Sun Certified Web Component Developer)是Oracle公司提供的一个Java Web开发认证,它...

    《动态Web数据库技术——基于JSP和XML技术实现》

    《动态Web数据库技术——基于JSP和XML技术实现》是一本深入探讨如何使用JSP(JavaServer Pages)和XML(eXtensible Markup Language)在Web环境中构建动态数据库应用的书籍。结合书中的PPT和代码示例,我们可以学习...

    Java面试题——重整理版

    比如JSP的EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library),Servlet的过滤器和监听器,JDBC的连接池管理,JDO的数据持久化策略,XML的XPath和XSLT转换,EJB的无状态和有状态会话bean,...

    Java类图书.pdf

    它涵盖了Apache文件上传组件、Servlet过滤器和监听器、国际化应用、EL表达式语言、自定义标签、JSTL应用、Web安全域、Tomcat服务器配置、JSP文档以及Servlet 2.4应用程序部署描述符等高级主题。这本书适合有经验的...

    JSTL标签库jar包文件

    **JSTL(JavaServer Pages Standard Tag Library)标签库**是Java Web开发中的一个重要组成部分,主要用于简化JSP页面中的代码,提升可维护性和可读性。JSTL提供了一系列预定义的标签,用于处理常见的任务,如迭代、...

    亮剑Java web源代码+ppt教程05——08

    "亮剑Java web源代码+ppt教程05——08"是一个关于Java Web开发的教育资源,结合了实际项目案例和理论讲解。这个压缩包包含了第五到第八部分的课程内容,旨在帮助学习者深入理解Java Web开发的核心技术和实践方法。...

    jstl ,stander ,Mysql-connector-java 三个框架包

    在实际开发中,这三者通常是协同工作的,JSTL和Standard负责页面呈现和逻辑处理,而Mysql-connector-java则作为后端数据访问层的关键组件,负责数据的存取。 总结起来,JSTL、Standard和Mysql-connector-java是Java...

    Web程序设计——JSPppt

    孙延鹏的《Web程序设计——JSP》教程是学习JSP的重要资源,它涵盖了JSP的基础到高级概念,旨在帮助开发者掌握在Web环境中使用Java进行服务器端编程。 **JSP基础** 1. **JSP语法**: JSP页面由HTML或XML标记和嵌入的...

    动态Web数据库技术——基于JSP和XML技术实现

    1. JSP基础:包括JSP的生命周期、指令、脚本元素以及EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)的使用。 2. JDBC基础:介绍如何建立数据库连接、执行SQL语句以及处理结果集。 3. ...

    java分页——taglib

    总结来说,`java分页——taglib`是利用自定义标签库来简化Java Web应用中分页功能的实现。通过`pagerdemo`,开发者可以方便地在JSP页面中插入分页组件,并在后端处理分页逻辑,从而提高代码的复用性和可维护性。这个...

    jstl的两个jar包

    在Java Web开发中,JSTL经常与EL(Expression Language)一起使用,为开发者提供了处理常见任务的能力,如迭代、条件语句、XML处理等,而无需编写自定义标签库。 这两个jar包——`jstl-1.2.jar`和`standard-1.1.2....

    webjava.rar_webjava

    3. **JSP(JavaServer Pages)**:"webJSP.pdf"可能包含JSP的语法、指令、脚本元素、EL(表达式语言)和JSTL(JavaServer Pages Standard Tag Library)等内容。JSP可以简化动态页面的开发,通过使用内置的对象和...

    Java Web程序设计-1期 《Java Web程序设计》_参考资源_学习参考书籍.doc

    "Java Web开发详解"则深入剖析了Java Web的各个方面,包括Servlet、JSP语法、EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)。这部分内容对于初学者来说尤为重要,因为它提供了构建Web...

    Java开发指南-Servlets和JSP篇(PDG)

    综上所述,“Java开发指南-Servlets和JSP篇”涵盖了从基础到高级的Servlet和JSP知识,是学习Java Web开发的重要参考资料。通过深入学习这些内容,开发者可以有效地构建出高效、响应式的Web应用程序。

    Java基础学习资料

    "20.jsp自定义标签.docx"将教你如何创建和使用自定义的JSP标签,提升JSP页面的复用性和可读性。 "14.Html基础积累总结(上).docx"虽然不在Java的核心部分,但作为Web开发的基础,HTML的了解是必要的,尤其是对于做...

    web应用程序——bbs论坛

    JSP标签库(Tag Libraries)如JSTL(JavaServer Pages Standard Tag Library)也可以用来简化页面逻辑,提高代码可读性。 JavaScript则在客户端发挥关键作用,提供了丰富的用户体验。它是一种解释型的、轻量级的...

Global site tag (gtag.js) - Google Analytics