Web开发基础_Servlet学习_0016_Jsp中使用自定义标签库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Coder_Boy_/article/details/82503923

JSTL原理

我们可以参照 jstl.jar 中原始的标签库 编写一个自己的标签库:

下面通过案例演示如何 编写一个获取指定格式的系统时间的标签

我们还是以上一节演示工程基础上编写此案例

案例演示:

工程案例目录结构

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>Jsp03</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>demo</servlet-name>
  	<servlet-class>web.DemoServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>demo</servlet-name>
  	<url-pattern>/demo</url-pattern>
  </servlet-mapping>
</web-app>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>Jsp03</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>demo</servlet-name>
  	<servlet-class>web.DemoServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>demo</servlet-name>
  	<url-pattern>/demo</url-pattern>
  </servlet-mapping>
</web-app>

DemoServlet.java

package web;

import java.io.IOException;

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

import entity.Course;
import entity.Student;

public class DemoServlet extends HttpServlet{

	@Override
	protected void service(HttpServletRequest req,
			HttpServletResponse res) throws ServletException, IOException {
			//模拟一份数据
		Student s= new Student();
		s.setName("CANG");
		s.setAge(40);
		s.setSex("M");
		s.setInterests(new String[]{"篮球","足球","排球"});
		Course c = new Course();
		c.setId(1);
		c.setName("Java");
		c.setDays(80);
		s.setCourse(c);
		//转发到JSP
		req.setAttribute("stu", s);
		//当前:/Jsp03/demo
		//目标:/Jsp03/demo.jsp
		req.getRequestDispatcher("demo.jsp").forward(req,res);
	}

	
}

SysdateTag.java

package web;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

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

public class SysdateTag extends SimpleTagSupport{
	
	
	//日期格式
	private String format = "yyyy/MM/dd HH:mm:ss";
	
	public String getFormat() {
		return format;
	}

	public void setFormat(String format) {
		this.format = format;
	}


	@Override
	public void doTag() throws JspException, IOException {
		//创建当前系统时间
		Date date = new Date();
		//格式化这个时间
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		
		String now  = sdf.format(date);
		
		//3.将格式化后的时间输出
		//该方法声明返回的是JspContext 
		//而实际返回的是PageContext
		//PageContext extends JspContext
		PageContext ctx =(PageContext)this.getJspContext();
		JspWriter w = ctx.getOut();
		w.println(now);
		//此处不能关闭writer,因为其他的标签
		//也共用此writer。
	}


}

s.tld

<?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">
	
	<description>这是我自己的标签库</description>	
	<display-name>My JSTL</display-name>
	<tlib-version>3.1</tlib-version>
	<short-name>s</short-name>
	<uri>/cheri-tag</uri>
	
	<tag>
		<description>
			该标签用来输出系统时间,
			且时间格式可以自己设置。
			
		</description>
		<name>sysdate</name>
		<tag-class>web.SysdateTag</tag-class>
		<!--声明双标签的内容类型(<a>内容</a>)
			由于当前标签没有内容,因此其类型为空。 -->
		<body-content>empty</body-content>
		<attribute>
			<description>用来设置日期的格式</description>
			<name>format</name>
			<!--该属性是否必须传入值 -->
			<required>false</required>
			<!--是否允许使用EL给属性传入值 -->
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
</taglib>

demo.jsp

<%@page pageEncoding="utf-8"%>
<!-- 引入标签库 -->
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="/cheri-tag" prefix="s" %>
<!doctype html>
<html>
	<head>
		<title>EL和JSTL</title>
		<meta charset="utf-8">
	</head>
	<body>
		<p><s:sysdate/></p>
		<p><s:sysdate format="yyyy-MM-dd"/></p>
		
		
		
	</body>
</html>

Jsp03工程部署到Tomcat上,运行Tomcat启动案例工程,

浏览器录入http://localhost:8080/Jsp03//demo 即可:如果没有错误,最终页面显示效果应如下图:

猜你喜欢

转载自blog.csdn.net/Coder_Boy_/article/details/82503923