自定义自结束标签
功能:获取客户端ip
1.定义标签处理类
package com.javaweb.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.SimpleTagSupport;
public class ClientIpTag extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
//获取PageContext对象
PageContext ps = (PageContext) this.getJspContext();
//获取请求对象
ServletRequest request = ps.getRequest();
//获取客户端ip
String clientIp = request.getRemoteAddr();
/获取标准输出流
JspWriter out = ps.getOut();
//将输出流写到客户端
out.write(clientIp);
}
}
2.注册标签信息
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>ct</short-name>
<uri>http://myself/jsp/el/tag</uri>
<tag>
<!--标签名-->
<name>ClientIp</name>
<!--标签过滤器class-->
<tag-class>com.javaweb.tag.ClientIpTag</tag-class>
<!--标签体的格式设置-->
<body-content>empty</body-content>
</tag>
</taglib>
3.使用标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!--使用自定义标签库 -->
<%@taglib uri="http://myself/jsp/el/tag" prefix="ct"%>
<!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>Insert title here</title>
</head>
<body>
<ct:ClientIp/>
</body>
</html>
带标签体的自定义标签
功能:字符串转大写
1,定义标签处理类
@Override
public void doTag() throws JspException, IOException {
//创建一个输出流,该流中的内容可以通过其toString方法获取其文本形式
StringWriter sw = new StringWriter();
//获取标签体的对象
JspFragment jf = this.getJspBody();
//将标签体写入到输出流
jf.invoke(sw);
//以文本的形式获取到输出流中的内容
String content = sw.toString();
//小写变大写
content = content.toUpperCase();
//将转换为大写内容写入到标准输出流
this.getJspContext().getOut().write(content);
}
2.注册标签
<tag>
<name>LowerToUpperTag</name>
<tag-class>com.javaweb.tag.LowerToUpperTag</tag-class>
<!--设置获取标签体的格式为el表达式-->
<body-content>scriptless</body-content>
</tag>
3.使用自定义标签
<%
String username = "aaa";
pageContext.setAttribute("username", username);
%>
<ct:LowerToUpperTag>${username}</ct:LowerToUpperTag>
带属性的自定义标签
功能:根据标签属性值显示性别。
1.定义标签处理类
private boolean text ;
public void setText(boolean text){
this.text = text;
}
@Override
public void doTag() throws JspException, IOException {
if(text){
//为null默认使用标准输出流。等价于this.getContext().getOut()
this.getJspBody().invoke(null);
}
}
2.注册标签
<tag>
<name>if</name>
<tag-class>com.javaweb.tag.ifTag</tag-class>
<body-content>tagdependent</body-content>
<!--注册标签属性-->
<attribute>
<name>text</name>
<!--
true:表示必须写,不然报错。
-->
<required>true</required>
<!--
runtime expression values:运行时表达值。
ture:表示该属性支持EL表达式和jsp表达式
-->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
3.使用标签
<%
boolean gender = true;
pageContext.setAttribute("gender", gender);
%>
<ct:if text="${gender}">男</ct:if>
<ct:if text="${not gender}">女</ct:if>