首先需要导入2个jar包,分别是:
servlet-api.jar
jsp-api.jar
这2个jar包都可以在tomcat的服务器的lib文件夹中找到,
在WEB-INF目录下新建一个后缀名为.tld的文件,文件名称随便起,我的文件名为:solid-tags.tld文件内容为: <?xml version="1.0" encoding="UTF-8"?>
1.0
1.2
url
com.xinpin.front.web.tag.xpo
empty
命名空间,也是自定义标签的属性--
fileName
true
true
新建一个常量类,用来被jsp标签读取,文件名称:Url.java package com.xinpin.front.web.constantsUrl;
//接口中的属性默认都是Public static final 类型的,(公共静态常量)
public interface Url {
String LOGIN_URL = "login.view";
}
定义一个Java类来负责输出常量类的属性内容,文件名为:xpo.java package com.xinpin.front.web.tag;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import com.xinpin.front.web.constantsUrl.Url;
/**
* jsp自定义标签
* 先导入servlet-api和jsp-api的jar包,
* @author xindong
*
*/
public class xpo extends TagSupport {
private static final long serialVersionUID = -8855151786721428161L;
private String fileName;
/* // 反射获取当前类和父类的某个公有属性
Field gradeField = student.getClass().getDeclaredField("mGrade");
// 获取属性值
System.out.println(" my grade is : " + gradeField.getInt(student));
// 设置属性值
gradeField.set(student, 10);
System.out.println(" my grade is : " + gradeField.getInt(student));*/
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public int doStartTag() throws JspException {
try {
// 反射获取接口或者类的对象,这里使用全类名获取,
final Class> cls = Class.forName("com.xinpin.front.web.constantsUrl.Url");
//获取指定属性的对象,这个Field对象代表着一个属性,
Field urlField = cls.getField(fileName);
// 获取属性值
System.out.println(" my field is : " + urlField.get(Url.class));
// 设置属性值
/* urlField.set(cls, "123");
System.out.println(" my grade is : " + urlField.getInt(cls));*/
HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
JspWriter out = pageContext.getOut();
//在jsp上面打印出这个属性的值
out.println(urlField.get(Url.class));
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//这里固定这样写,不知道为啥
return SKIP_BODY;
}
}
新建一个jsp文件,名称:index.jsp
pageEncoding="utf-8"%>
Insert title hereFile :
文件的整体目录是这样的
运行成功!怎么样?是不是很简单呢?