`
黑暗浪子
  • 浏览: 507853 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2讲义26

阅读更多

 

5.7  Struts2 自定义标签实现图形验证功能

本节中将介绍如何自定义开发者自己的 Struts2 标签来实现登录时图形验证功能。

技术要点

本节先以 JSP 视图技术作为模板文件使用的视图技术。介绍如何实现图形验证功能。最后结合 component 标签来说明该标签重要属性。

JSP 模板文件如何实现图形验证功能。

component 标签调用模板文件。

演示代码

JSP 模板文件:

<!--------------文件名:image.jsp---------------->
<%@ taglib uri="Self" prefix="s" %>
………
  <s:self></s:self>
………
 

 

自定义标签 Self 类文件代码:

<!---------文件名:SelfDefinationTag.java----------->

public class SelfDefinationTag extends TagSupport {
         ………
         public int doStartTag() throws JspException {        
                    JspWriter out = pageContext.getOut();
                    try{
                             out.println("<img src=\"..\\validateImage\"/>");
                    }catch (IOException ioe1){
                             ioe1.printStackTrace();
                    }                           
                   return EVAL_BODY_INCLUDE  ;
         }
…………
 

 

自定义标签 Self 模板定义文件( TLD 文件):

<!----------文件名:self.tld------->
<taglib>
         <tlib-version>1.0</tlib-version>
         <jsp-version>1.2</jsp-version>
         <short-name>map</short-name>
         <tag>
                   <name>self</name>
                   <tag-class>servlet.SelfDefinationTag</tag-class>
                   <body-content>JSP</body-content>
         </tag>
</taglib>
 

 

自定义标签 Self web.xml 文件中的部署定义:

<!----------文件名:web.xml------->
<servlet>
                   <servlet-name>validateImage</servlet-name>
                   <servlet-class>servlet.ValidateImage</servlet-class>
         </servlet>
         <servlet-mapping>
                   <servlet-name>validateImage</servlet-name>
                   <url-pattern>/validateImage</url-pattern>
</servlet-mapping>
…………
<taglib>
                   <taglib-uri>Self</taglib-uri>
                   <taglib-location>/WEB-INF/tlds/self.tld</taglib-location>
</taglib>
 

 

使用 component 标签调用模板文件的 JSP

<!------------文件名:SelfDefinationTag.jsp--------------->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
         <head>
                   <title>使用JSP模板自定义标签</title>
         </head>
         <body>
                   <h3 align="left">
                            使用JSP模板实现图形验证标签
                   </h3>
                   <p>
                            <s:component template="/components/image.jsp" />
                   </p>
                   <h3 align="left">
                            指定特定主题实现图形验证标签
                   </h3>
                   <p>
                            <s:component theme="ajax" template="/components/image.jsp" />
                   </p>
                   <h3 align="left">
                            指定特定模板目录实现图形验证标签
                   </h3>
                   <p>
                            <s:component theme="ajax" templateDir="MyTemplate"
                                     template="/components/image.jsp" />
                   </p>
         </body>
</html>
 

 

自定义图形验证标签页面效果图 5.31

 

5.31  自定义图形验证标签范例图

代码解释

1 )在本示例中,随机生成动态数字的图形不是本节重点讲述的要点。因此有关生成动态数字图的 servlet ,读者可以参看示例代码。这里笔者通过实现 Struts2 TagSupport 接口定义了一个标签处理类。重写了 doStartTag ()方法。在该代码中读者也可知道这个自定义的标签只是插入了一段 HTML 图像代码,其中的 validateImage 就是笔者写的生成动态数字图的 servlet 类。在配置文件 web.xml 中也有该 servlet 的映射定义。

然后在示例项目的 WEB_INF 目录下新建了“ tlds ”目录,在该目录下新建了 self.tld 文件。定义了 self 标签。并且也在配置文件 web.xml 中声明了该标签。

之后又新建了 image.jsp 文件。引入了 self 标签的声明。该文件就作为实现图形验证标签的 JSP 模板文件。在代码中使用 self 标签定义。

2 )因为 Struts2 中的 component 标签是用来方便开发者定义自己开发的标签。因此笔者定义了一个新的 JSP 文件,在该文件中使用 component 标签来调用 image.jsp 这个模板文件。

在示例项目的 WebRoot 根目录下,笔者新建了几个文件夹,用以来特殊说明 component 标签是如何使用这些主题和模板。目录结构如图 5.32

 

5.32  主题和模板结构图

如代码所示,该标签有三个属性比较重要,而且它们都可以不显式申明。并且由图 5.32 可知,笔者在这些目录下都存放了 image.jsp 这个模板文件。因此 component 标签中 template 属性就是指定该模板文件所在路径。细心读者可以发现 template 属性中的模板文件路径不是全路径,前面缺少了模板根目录和主题文件夹名字的定义。这是因为 component 标签另外两个属性是分别来定义模板根目录和主题文件夹名字的。这两个属性是 templateDir 属性和 theme 属性。

其中 theme 属性就是定义之前所记述的主题。上一小节也提到它可以默认是“ xhtml ”主题。因此如果它没有显式声明,则表明主题为“ xhtml ”。则系统调用的模板文件是“ xhtml ”文件夹下的 JSP 模板。

同理, templateDir 属性是定义模板文件所在的根目录名。如果它不显式声明,则默认为“ template ”。因此假设 templateDir 属性和 theme 属性都不显式声明,则系统调用的模板文件就是 /template/xhtml 下的模板文件。

注意: component 标签内也可以使用 param 标签。这个标签可以作为很多标签的子标签。前面也有所提及,请读者仔细品味。

3 )本示例调用 JSP 模板文件的 JSP 代码中。第一个小例子同时不显式声明 templateDir 属性和 theme 属性,则调用的 image.jsp 文件是 /template/xhtml/components/ 下的那个模板文件。第二个小例子中显式声明 theme 属性为“ ajax ”,则它调用的是 /template/ajax/components/ 下的模板文件。第三个例子中 theme 属性为“ ajax ”, templateDir 属性为“ MyTemplate ”,则它调用的是 /MyTemplate/ajax/components/ 下的模板文件。

4 component 标签调用的模板文件可以不是 JSP 文件,它还可以是 vm ftl 文件。这两个文件分别是 velocity FreeMarker 默认的模板文件后缀名。因此 template 属性中也可以指定这两种文件类型的模板文件。同理,也可以使用这两种类型文件来调用模板文件,不必要光使用 JSP 来调用这两种和 JSP 总共三种文件类型的模板文件。在下一章笔者将具体介绍如何在 Struts2 框架中使用 velocity FreeMarker 这两种视图技术。

  • 大小: 49.6 KB
  • 大小: 28.3 KB
6
0
分享到:
评论

相关推荐

    struts2讲义 struts2讲义struts2讲义struts2讲义struts2讲义

    ### Struts2讲义知识点概览 #### 一、Struts2的历史与发展 - **Struts框架的发展历程**: - Struts最初版本发布于2000年,是Java Web开发领域的一个重要里程碑。 - 随着时间的发展和技术的进步,Struts逐渐暴露...

    struts2讲义

    ### Struts2框架入门知识点详解 #### 一、Struts2框架概述 ##### 1.1 Struts2简介 Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,用于简化Java Web应用程序的开发过程。与传统的Java Web...

    struts2讲义 DOC版

    struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义

    struts2讲义-详解

    本讲义将详细介绍Struts2的核心概念、工作原理以及如何在实际项目中应用。 一、Struts2简介 Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,旨在解决Struts1在可扩展性和灵活性上的不足。Struts2提供...

    struts2讲义,讲解struts2的框架

    在本讲义中,我们将深入探讨Struts2的基本概念、依赖的库、启动配置以及配置文件。 首先,开发Struts2应用需要依赖一些核心的JAR文件。这些文件包括: 1. `struts2-core-2.x.x.jar`:这是Struts2框架的核心库,...

    原创struts2讲义2.pdf

    ### Struts2框架详解 #### 一、Struts2框架介绍与概述 ##### 1.1 Struts2框架概述 Struts2是一个基于MVC(Model-View-Controller)模式的开源Java Web应用框架,它提供了强大的功能来帮助开发者构建灵活、可扩展...

    《Struts2讲义》吴峻申【电子书】

    第2章 Web基础技术简介第3章 Struts2核心技术第4章 另一Struts2核心技术:拦截器第5章 Struts2标签库第6章 Struts2非JSP视图技术第7章 Struts2类型转换技术第8章 Struts2输入校验第9章 Struts2国际化第10章 Struts2...

    Struts2讲义(Word文档格式)

    本讲义详细介绍了Struts2框架的各个方面,帮助开发者从基础到进阶全面掌握其用法。 1. **Struts2概述** Struts2是Apache软件基金会的开源项目,它继承了Struts1的优点并解决了其局限性,提供了更优秀的行动控制器...

    struts2讲义.doc

    ### Struts2讲义知识点概览 #### 一、Struts2的历史与发展 - **Struts框架的演变**:从Struts1到Struts2,框架经历了从MVC(Model-View-Controller)架构的经典实践到更为灵活、强大的迭代升级。 - **Struts2的...

    struts2 教程 讲义.(pdf)

    本教程讲义深入浅出地介绍了Struts2的核心概念和技术,旨在帮助开发者快速掌握这个框架的使用。 在Struts2中,主要知识点包括: 1. **MVC设计模式**:MVC模式是软件工程中的经典设计模式,它将应用程序分为模型...

    struts2讲义,解析

    这个“struts2讲义”显然提供了一个全面的教程,旨在帮助学习者理解和掌握Struts2的核心概念和技术。以下是Struts2的一些关键知识点: 1. **MVC模式**:Struts2基于Model-View-Controller(MVC)设计模式,它将应用...

    Struts2讲义1

    Struts2讲义1 Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web开发框架,由Apache软件基金会维护。它继承了Struts1的优点,并结合了WebWork框架的功能,提供了更强大的控制层解决方案。Struts2的...

    西安野马计算机培训学校STRUTS2讲义

    西安野马计算机培训学校的STRUTS2讲义,可能涵盖了这一框架的基础知识和高级特性,帮助学员理解和掌握Struts2的核心概念。 首先,Struts2的基础部分可能包括以下几个方面: 1. **架构原理**:讲解Struts2的MVC设计...

    黑暗浪子写的struts2讲义.pdf

    Struts2是Apache软件基金会...总的来说,黑暗浪子的这本Struts2讲义涵盖了Struts2的各个方面,无论对于初学者还是有经验的开发者,都是一个宝贵的参考资料,能帮助读者深入理解和熟练运用Struts2框架,提高开发效率。

    struts2讲义_吴峻申

    Struts2讲义 作者:吴峻申 目录 第1章 Struts过时了吗? 10 1.1 Struts历史发展过程 10 1.2 Struts2的“简历” 13 1.2.1 标签库介绍 13 1.2.2 拦截器应用目的 14 1.2.3 FilterDispatcher和Action概述 14 1.2.4 ...

Global site tag (gtag.js) - Google Analytics