JSPL的简单应用与自定义标签

JSPLc标签的使用和自定义标签

我们知道JSPL的出现,简化了JSP页面的代码,提高界面的简洁度。这次我们先简单说说C标签,再介绍如何自定义标签

  1. 首先,我们建立一个实体类,用来存储对象,方便绑定
package Bean;
/**
 * 
 * @author 悦酱IKA
 *设置实体类
 * 2020年3月23日-下午4:36:26
 */
public class Employee {
	private String name;
	private String gender;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
}

  1. 创建一个实现操作的类
package web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Bean.Employee;
/**
 * 设置类型,与session进行绑定
 * @author 悦酱IKA
 *
 * 2020年3月26日-下午2:56:32
 */
public class ActionServlet extends HttpServlet{

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter out = resp.getWriter();
		
		String uri = req.getRequestURI();
		String path = uri.substring(uri.lastIndexOf('/')+1, uri.lastIndexOf('.'));
		//判断路径
	//	System.out.println(path);
		if(path.equals("list")) {
			List<Employee> ee = new ArrayList<Employee>();
			Employee emp1 = new Employee();
			Employee emp2 = new Employee();
			Employee emp3 = new Employee();
			emp1.setName("tom");
			emp1.setGender("m");
			emp2.setName("Rose");
			emp2.setGender("w");
			emp3.setName("Kety");
			ee.add(emp1);
			ee.add(emp2);
			ee.add(emp3);
			//绑定集合对象
			req.setAttribute("emps", ee);
			req.getRequestDispatcher("jspl04.jsp").forward(req, resp);
		}
	}
}

通过这个步骤,我们就实现了代码的绑定工作。我们就可以通过request,getAttribute()来获取我们所绑定的对象。

  1. 创建jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="Bean.*,java.util.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
 .s1{
 background: #ffa631;
 }
 .s2{
 background: #96ce54;
 }
</style>
<body>
<!-- 添加varStatus属性,输出varSataus中的index和count的值,index代表
对象集合的下标,count表示访问次数 -->
<br><br>
员工信息列表:<hr>
<!--创建列表,样式每行变换-->
<c:forEach var="emp" items="${emps }" varStatus="s">
	<p class="s${s.index%2+1 }">
	姓名:${emp.name } &nbsp;
	性别:<c:choose >
		<c:when test="${emp.gender =='m' }"></c:when>
		<c:when test="${emp.gender =='w' }"></c:when>
		<c:otherwise>性别未知</c:otherwise>
	</c:choose>&nbsp;
	<!--if标签的使用方法-->
	性别:<c:if test="${emp.gender =='m'}" var="rs" scope="request"></c:if>
		<c:if test="${!rs }"></c:if>
	index:${s.index } &nbsp;
	count:${s.count }</p>
</c:forEach>
</body>
</html>

还需要建立一个以*.do的后缀匹配的XML文件,来将操作类中的list.do方法展示。这里就不放出来了。通过以上三个文件,就可以简单的使用c标签的来操作。(我讲的好不清楚呀,去当培训老师,一定会被开除的QAQ)

从上面,我们已经学会了JSPLc标签的简单应用了。现在我们来学习一下自定义标签。
自定义标签,顾名思义,我们根据自己的需求,来使用标签,我们现在假设,我们需要,把I love china这句话,输出10次,我们使用自定义标签常识把这个实现。

  1. 创建一个实现自定义逻辑的实体类
package mytap;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;

/**
 * 
 * @author 悦酱IKA
 *自定义标签具备两个属性,一个用于设定要输出的内容,一个用于设定输出的次数
 *在自定义标签类中两个属性接受页面中设定的数据,获取页面对象中的输出对象,输出内容
 *
 *
 *为了接受页面指定的参数,需要定义两个属性,并添加set/get方法
 *注意,属性名称要与使用标签的属性名称一致
 *重写doTag方法,将要执行的方法和动作在这个里面定义
 * 2020年3月26日-下午3:47:17
 */

public class HelloTest extends SimpleTagSupport{
	private String str;
	private int count;
	@Override
	public void doTag() throws JspException, IOException {
		// TODO Auto-generated method stub
		PageContext ctx =(PageContext) getJspContext();
		JspWriter out = ctx.getOut();
		for (int i=0;i<count;i++) {
			out.println(str+"
"
); } } public String getStr() { return str; } public void setStr(String str) { this.str = str; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } }

需要注意的是,对于代码的逻辑一定要通过doTag方法重写,而我们其中定义的str和count,就像是我们使用标签的属性一样。当我们通过调用自定义标签的时候,我们像赋值一样,的为其属性赋值。

  1. 创建tld文件(与xml同级目录)
<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
  <tlib-version>1.1</tlib-version>
  <short-name>c3</short-name>
  <!-- 自定义标签名 -->
  <uri>http://IKA.com/mytag</uri>
    <!-- 自定义uri-->
 <tag>
    <description>
        根据指定次数打印文本
    </description>
    <!-- 标签名,例如<c:if>标签的if -->
    <name>pt</name>
    <!-- 方法逻辑在这个包中 -->
    <tag-class>mytap.HelloTest</tag-class>
    <body-content>empty</body-content>
    <!-- 配置两个属性的信息 -->
    
    
    <attribute>
        <description>
        Content
        </description>
        <name>str</name>
        <required>false</required>
        <rtexprvalue>false</rtexprvalue>
    </attribute>
    
    
    <attribute>
        <description>
        times
        </description>
        <name>count</name>
        <required>false</required>
        <rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>
</taglib>

关于创建tld文件的方法,可以直接通过修改后缀名更改。上面设置的uri要与JSP中的保持一致。关键!要导入包JSPL的简单应用与自定义标签_第1张图片
这部缺少了,是不会实现的哦!

3.创建调用自定义标签的jsp界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="mytap.*" %>
<%@taglib uri="http://IKA.com/mytag" prefix="c3" %>
<!--这里uri与prefix要与我们设置的保持一致-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 使用自定义标记 ---count str---属性名 -->
<c3:pt count="10" str="I love china!"/> 
</body>
</html>

到这里,自定义标签到目前为止,就算是实现了。我们看一下预览效果。JSPL的简单应用与自定义标签_第2张图片
闪亮的中国心在我心中跳动!默默的努力,为祖国加油!

你可能感兴趣的:(JSPL的简单应用与自定义标签)