在JSP2.0之后支持自定义标签,现在一般都是jsp2.4的版本了,所以无须考虑版本的问题。直接使用就可以了。虽然一般开发的过程中,很少会自己定义JSP标签,但是通过一个JSP自定义标签的学习,可以从一定程度上理解struts等框架把好好的JSP标签改得面目全非的机理。正如Jquery本质是Javascript一样,SSH实际上Jsp。其实也没有什么,一个简单的例子就能够完全说明如何在JSP中自定义的标签。
通过自定义标签就能够达到所谓的MODEL2标准,在展示层VIEW给别人看的网页中不得出现任何的服务器执行代码。如果出现了,就是那种MODEL1的标准。
一、基本目标
定义一个clock标签,这个标签还要求传入一个ID,
之后,如果JSP之中使用这个标签,传入一个ID,就会在页面显示当前的时间与传入的ID,如下图所示:
二、基本准备
这个东西不用引入任何的jar,web.xml文件可以利用eclipse for javaee自动生成,删除没用的东西,也不用配置任何东西,JSP2.0之后就自带定义标签库的属性,如下所示,web.xml自动生成的方法可以参考《【Javaweb】Eclipse for JavaEE新建的Web工程自动生成web.xml》(点击打开链接)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> </web-app>
网站目录结构如下图,在WEB-INF下新建一个tags文件夹,之后我们的标签都是tags:了,这个文件夹的命名决定了以后的标签头,这个文件夹以后就是我们的标签库,理论上这个tags放在哪里都可以,但是,为了不让别有用心的用户胡乱访问,所以还是放在WEB-INF之中:
三、制作过程
1、此次涉及到一个比较少见的,后缀名为.tag的文件,右击刚刚建好tags文件夹,选择New->Other...,新建一个tag文件。
2、在弹出的对话框,输入tags,选择JSP Tag,点击下一步,命名为clock,由于clock.tag在tags里面,以后调用这个标签就tags:clock了,你的文件夹与文件名的名字决定了这个以后标签的名字,就可以开始编辑clock.tag了
3、clock.tag文件如下所示,这个文件就是用来说明这个文件是干什么用,这就定义好tag:clock的动作了,ognl表达式里面的s:if标签,也就是这样的道理,在s文件夹下下面有个if.tag文件,然后写好这个if.tag所执行的工作,先输出当前时间,时间输出的JAVA代码与《【Java】有关System.currentTimeMillis()的思考》(点击打开链接)的一模一样,丝毫没改,然后把传入来id以<h1></h1>来显示,根本就一段HTML+JSP混写的代码
<!-- 改好网页头的编码为utf-8,引入相应的java包 --> <%@ tag language="java" pageEncoding="utf-8" import="java.util.Date,java.text.SimpleDateFormat"%> <!-- 这个本标签将会引入id参数 --> <%@ attribute name="id" %> <% //如果要在jsp脚本中使用传入参数则这样写 request.getAttribute("a"); //输出时间 out.println(new SimpleDateFormat("yyyy年MM月dd日hh:mm:ss E").format(new Date(System.currentTimeMillis())).toString()); %> <!-- 如果这个参数是直接输出的,则这样写 --> <h1>${id}</h1>
4、在index.jsp对tags:clock标签传入参数“你好”,就会看到运行效果了。这样就形成了所谓的MODEL2网页编程规则,就是正常网页中不得出现任何的执行代码……说什么能够很好地提高网页代码的复用性。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>index</title> </head> <body> <tags:clock id="你好" /> </body> </html>