我们知道JSPL的出现,简化了JSP页面的代码,提高界面的简洁度。这次我们先简单说说C标签,再介绍如何自定义标签
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;
}
}
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()来获取我们所绑定的对象。
<%@ 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 }
性别:<c:choose >
<c:when test="${emp.gender =='m' }">男</c:when>
<c:when test="${emp.gender =='w' }">女</c:when>
<c:otherwise>性别未知</c:otherwise>
</c:choose>
<!--if标签的使用方法-->
性别:<c:if test="${emp.gender =='m'}" var="rs" scope="request">男</c:if>
<c:if test="${!rs }">女</c:if>
index:${s.index }
count:${s.count }</p>
</c:forEach>
</body>
</html>
还需要建立一个以*.do的后缀匹配的XML文件,来将操作类中的list.do方法展示。这里就不放出来了。通过以上三个文件,就可以简单的使用c标签的来操作。(我讲的好不清楚呀,去当培训老师,一定会被开除的QAQ)
从上面,我们已经学会了JSPLc标签的简单应用了。现在我们来学习一下自定义标签。
自定义标签,顾名思义,我们根据自己的需求,来使用标签,我们现在假设,我们需要,把I love china这句话,输出10次,我们使用自定义标签常识把这个实现。
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,就像是我们使用标签的属性一样。当我们通过调用自定义标签的时候,我们像赋值一样,的为其属性赋值。
<?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中的保持一致。关键!要导入包
这部缺少了,是不会实现的哦!
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>