JSP custom tags basic usage

Custom self-closing tag

Function: Get IP client
1. tag handler class definitions

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. The registration tag information

<?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. Use tag

<%@ 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>

Custom label tape tab body

Function: String uppercase turn
1, tag handler class defined

@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. Registration label

	<tag>
        <name>LowerToUpperTag</name>
        <tag-class>com.javaweb.tag.LowerToUpperTag</tag-class>
        <!--设置获取标签体的格式为el表达式-->
        <body-content>scriptless</body-content>
    </tag>

3. Use a custom label

<% 
	String username = "aaa";
	pageContext.setAttribute("username", username);
%>
	<ct:LowerToUpperTag>${username}</ct:LowerToUpperTag>

Custom label tape properties

Function: The gender tag property value is displayed.
1. Define tag handler class


	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. Registration label

  <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. Use tag

<% 
	boolean gender = true;
	pageContext.setAttribute("gender", gender);
%>
	<ct:if text="${gender}"></ct:if>
	<ct:if text="${not gender}"></ct:if>
Published 114 original articles · won praise 8 · views 5482

Guess you like

Origin blog.csdn.net/OVO_LQ_Start/article/details/104843501