自定义标签,我的第一个自定义标签!

总共分两步

  1. 编写一个实现tag接口的java类,把jsp页面中的java代码移到这个类中,(标签处理器类)
  2. 编写标签库描述符(tld)文件,在tld文件中把标签处理器类描述成一个标签

一.案例,

输出客户端IP

   ViewIP.jsp 

   

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.  
  3. pageEncoding="UTF-8"%>
  4.  
  5. <%@ taglib uri="/WEB-INF/firstTag.tld" prefix="itcast"%>
  6.  
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  8.  
  9. <html>
  10.  
  11. <head>
  12.  
  13. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  14.  
  15. <title>Insert title here</title>
  16.  
  17. </head>
  18.  
  19. <body>
  20.  
  21. <h4>您的iP:</h4>
  22.  
  23. <itcast:viewIP/>
  24.  
  25. </body>
  26.  
  27. </html>

ViewIP.jsp

  在WEB-INF目录下建立一个tld文件,:

  firstTag.tld

  

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2.  
  3. <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
  4.  
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6.  
  7. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  8.  
  9. version="2.0">
  10.  
  11. <description>A tag library exercising SimpleTag handlers.</description>
  12.  
  13. <tlib-version>1.0</tlib-version>
  14.  
  15. <short-name>view</short-name>
  16.  
  17. <uri>/WEB-INF/firstTag.tld</uri>
  18.  
  19. <tag>
  20.  
  21. <name>viewIP</name>
  22.  
  23. <tag-class>Tag.viewIPTag</tag-class>
  24.  
  25. <body-content>empty</body-content>
  26.  
  27. </tag>
  28.  
  29. </taglib>

firstTag.tld

  编写标签处理器类:

  viewIPTag.java

  

  1. package Tag;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.http.HttpServletRequest;
  6.  
  7. import javax.servlet.jsp.JspException;
  8.  
  9. import javax.servlet.jsp.JspWriter;
  10.  
  11. import javax.servlet.jsp.tagext.TagSupport;
  12.  
  13. public class viewIPTag extends TagSupport{
  14.  
  15. public int doStartTag() throws JspException{
  16.  
  17. HttpServletRequest request=(HttpServletRequest) this.pageContext.getRequest();
  18.  
  19. JspWriter out=this.pageContext.getOut();
  20.  
  21. String ip=request.getRemoteAddr();
  22.  
  23. try {
  24.  
  25. out.print(ip);
  26.  
  27. } catch (IOException e) {
  28.  
  29. // TODO Auto-generated catch block
  30.  
  31. e.printStackTrace();
  32.  
  33. }
  34.  
  35. return super.doStartTag();
  36.  
  37. }
  38.  
  39. }

viewIPTag.java

  效果截图:

  

java_自定义标签,我的第一个自定义标签!的更多相关文章

  1. Android自定义View(LineBreakLayout-自动换行的标签容器)

      最近一段时间比较忙,都没有时间更新博客,今天公司的事情忙完得空,继续为我的自定义控件系列博客添砖加瓦.本篇博客讲解的是标签自动换行的布局容器,正好前一阵子有个项目中需要,想了想没什么难度就自己弄了 ...

  2. Jsp2.0自定义标签(第二天)——自定义循环标签

    今天是学习自定义标签的第二天,主要是写一个自定义的循环标签. 先看效果图: 前台页面Jsp代码 <%@ page language="java" contentType=&q ...

  3. MyEclipse默认标签TODO,XXX,FIXME和自定义标签的使用

    MyEclipse默认标签TODO,XXX,FIXME和自定义标签的使用 MyEclipse中的一些特殊的注释技术包括:1.    // TODO —— 表示尚未完成的待办事项.2.    // XX ...

  4. 第一章 自定义MVC框架

    第一章  自定义MVC框架1.1 MVC模式设计    组成:Model:模型,用于数据和业务的处理          View :视图,用于数据的显示          Controller:控制器 ...

  5. 如何自定义JSTL标签与SpringMVC 标签的属性中套JSTL标签报错的解决方法

    如何自定义JSTL标签 1.创建一个类,从SimpleTagSupport继承 A) 通过继承可以获得当前JSP页面上的对象,如JspContext I) 实际上可以强转为PageContext II ...

  6. 年轻人的第一个自定义 Spring Boot Starter!

    陆陆续续,零零散散,栈长已经写了几十篇 Spring Boot 系列文章了,其中有介绍到 Spring Boot Starters 启动器,使用的.介绍的都是第三方的 Starters ,那如何开发一 ...

  7. js自定义事件、DOM/伪DOM自定义事件

    一.说明.引言 我JS还是比较薄弱的,本文的内容属于边学边想边折腾的碎碎念,可能没什么条理,可能有表述不准确的地方,可能内容比较拗口生僻.如果您时间紧迫,或者JS造诣已深,至此您就可以点击右侧广告(木 ...

  8. 漫谈js自定义事件、DOM/伪DOM自定义事件

    一.说明.引言 我JS还是比较薄弱的,本文的内容属于边学边想边折腾的碎碎念,可能没什么条理,可能有表述不准确的地方,可能内容比较拗口生僻.如果您时间紧迫,或者JS造诣已深,至此您就可以点击右侧广告(木 ...

  9. 自定义SWT控件六之自定义Tab

    6.自定义tab 本章节提供的自定义tab 分为两类 tab上带删除按钮和添加按钮,可删除tab和添加tab tab不可删除和添加 6.1 不可删除tab package com.view.contr ...

随机推荐

  1. java0618

    1. java的基本数据类型,各占多少字节? byte 8位 short 16位 int 32位 long 64位 float 32位 double 64位 boolean 1位 char 16位 2 ...

  2. 去掉字符空格js

    1. 去掉字符串两端的空格 String.prototype.trim = function () { return this.replace(/(^\s*)|(\s*$)/g, "&quo ...

  3. JavaScript实现页面刷新滚动条位置不变(利用cookie)

    实验环境:vs2015 asp.net(C#) 主要原理: 1.在页面滚动时或点击按钮时将当前滚动条位置记录到cookie[pos], 2.页面刷新或重载时查询cookie[pos]中的值是否存在,若 ...

  4. Pyhon学习笔记-基础3

    文件操作 1.基本操作 f = open("filename","r",encoding="utf-8") #打开文件,以r模式,字符编码模 ...

  5. ETC的发展演变

      ETC是不停车电子收费系统,ETC专用车道是给那些装了ETC车载器的车辆使用的,采用电子收费方式. ETC( Electronic Toll Collection ) 不停车收费系统是目前世界上最 ...

  6. Java安全编码:糟糕的在线建议和令人困惑的APIs

    对于程序员和软件开发人员来说,网络论坛提供了一个交流知识和寻找具体编码难题答案的好地方.遗憾的是,他们并不总是准确信息的来源. 弗吉尼亚理工大学的一组研究人员分析了数百篇关于Stack Overflo ...

  7. JS 实现版本号比较功能

    js实现一个客户端版本号的统计,目前该功能可以实现版本号中数字版本的统计,例如2.2.3 <2.2.3.1, 1.2.3<2.0.0,原理就是从高版本号到次版本号依次比较 if (!Arr ...

  8. 《Tornado介绍》—— 读后总结

  9. Windows下编译安装 FFmpeg

    在Linux/Mac下编译 ffmpeg是非常方便的.但要在 Windows下编译 ffmpeg还真要花点时间.以下就是在 Windowns下编译ffmpeg的步骤: 一.安装Cygwin 在wind ...

  10. PHPExcel防止大数以科学计数法显示

    在使用PHPExcel来进行数据导出时,常常需要防止有些数字(如手机号.身份证号)以科学计数法显示,我们可以采用下面的方式来解决: setCellValueExplicit第三个参数用PHPExcel ...