今天做一个超级简单的自定义标签。我们经常在jsp页面看见陌生的标签,例如<wp:viewIP/>,
那么我们如果定义一个自定义标签呢?
下面便是简单的原因介绍和步骤。
1、为什么使用自定义标签
(1)、为了不在jsp页面显示java代码,便于项目模块(代码)的维护。
(2)、控制jsp标签所在页面是否执行,根据人物权限是否显示,修改jsp页面的输出。
2、自定义标签的步骤(3步骤)
(1)、编写java类继承TagSupport或者实现Tag接口。
这里TagSupport已经实现了TagSupport接口,并复写doStartTag()方法。
(2)、在WEB-INF下编写tld文件,说明标签。
(3)、在jsp页面中引入
<%@taglib uri="/wp-tags" prefix="wp" %>
并使用<wp:showDate/>
具体文件:
java文件:
package com.haier.tag;
import java.io.IOException;
import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.TagSupport;
public class taglib extends TagSupport{
/**
*
* 自定义标签开发步骤
* 1、编写一个实现tag的java类,实际上集成TagSupport
* 2、在tld文件中定义标签描述文件(WEB-INF下)
* 3、在jsp页面中引入taglib标签并使用
*
* <p>Title: doStartTag</p>
* <p>Description: </p>
* @return
* @throws JspException
* @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
*/
@Override
public int doStartTag() throws JspException {
this.pageContext.getOut();
ServletRequest request=this.pageContext.getRequest();
// HttpServletRequest request=(HttpServletRequest) this.pageContext.getRequest();
JspWriter writer=this.pageContext.getOut();
String addr=request.getRemoteAddr();
try {
writer.print(addr);
} catch (IOException e) {
new Throwable();
}
return super.doStartTag();
}
@Override
public void setPageContext(PageContext pageContext) {
// TODO Auto-generated method stub
super.setPageContext(pageContext);
}
}
tdl文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
<description><![CDATA[ip地址"]]></description>
<display-name>"ip地址"</display-name>
<tlib-version>1.0</tlib-version>
<short-name>wp</short-name>
<uri>/wp-tags</uri>
<tag>
<description><![CDATA[ip地址]]></description>
<name>viewIP</name>
<tag-class>com.haier.tag.taglib</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!-- http://localhost:9000/ServletDemo/ -->
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
```
自定义标签,获取ip
<wp:viewIP/>
```
</body>
</html>