由于之前学习JSP时只是了解可以自定义JSP标签,但从没自己定义和使用过,具体怎么定义和使用不太清楚。最近,在项目过程中遇到一些问题,比如页面中接收或传递的某个值需要进行其他处理,而这样的处理在JSP页面写代码又不太适合,在后台处理再返回前台又比较麻烦,于是想到了使用JSP的自定义标签来解决这样的问题,然后对JSP自定义标签进行了简单学习,在此做下记录,并附上自己做的简单示例,希望对有需要的朋友有所帮助。
下面简单说一下具体步骤:
1.不用多说都知道,创建Web工程,我的工程命名为Tag;
2.创建JavaBean实体类Userinfo.java,代码如下:
package com.util.bean;
public class Userinfo {
private String userName;
private int age;
private String email;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
3.创建Tag.java类继承TagSupport类,用于自定义标签,代码如下:
package com.util.taglib;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import com.util.bean.Userinfo;
public class Tag extends TagSupport{
private Userinfo user;
//一般情况下我们只需重写doStartTag(),doEndTag()即可
//在开始标签属性设置后调用,如果返回SKIP_BODY则忽略标签之中的内容,如果返回EVAL_BODY_INCLUDE则将标签体的内容进行输出
public int doStartTag() throws JspException{
try{
JspWriter out = this.pageContext.getOut();
if(user == null){
out.println("NO Userinfo Found...");
return SKIP_BODY;
}
out.println("<table width='500px' border='1' align='center'>");
out.println("<tr>");
out.println("<td width='20%'>Username:</td>");
out.println("<td>" + user.getUserName() + "</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>Age:</td>");
out.println("<td>" + user.getAge() + "</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>Email:</td>");
out.println("<td>" + user.getEmail() + "</td>");
out.println("</tr>");
out.println("</table>");
}catch(Exception e){
System.out.println("出错啦!");
throw new JspException(e.getMessage());
}
return SKIP_BODY;
}
@Override
//在结束标签之前调用,返回SKIP_PAGE跳过整个jsp页面后面的输出,返回EVAL_PAGE执行页面余下部分
public int doEndTag() throws JspException {
return EVAL_PAGE;
}
@Override
//生命周期结束时调用
public void release() {
super.release();
this.user = null;
}
//getter and setter
public Userinfo getUser(){
return user;
}
//setPageContext() 将所在jsp页面的pageContext注入进来,目的是为了在后面的方法中可以访问到jsp页面对象的pageContext属性
//setParent() 设置此标签的父标签
//setAttribute() 将标签中的属性注入到此class的属性,不需要自己实现但要提供属性的get与set方法
public void setUser(Userinfo user){
this.user = user;
}
}
4.创建Taguti.java类,用于自定义标签功能(函数),代码如下:
package com.util.taglib;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import com.util.bean.Userinfo;
public class Tag extends TagSupport{
private Userinfo user;
//一般情况下我们只需重写doStartTag(),doEndTag()即可
//在开始标签属性设置后调用,如果返回SKIP_BODY则忽略标签之中的内容,如果返回EVAL_BODY_INCLUDE则将标签体的内容进行输出
public int doStartTag() throws JspException{
try{
JspWriter out = this.pageContext.getOut();
if(user == null){
out.println("NO Userinfo Found...");
return SKIP_BODY;
}
out.println("<table width='500px' border='1' align='center'>");
out.println("<tr>");
out.println("<td width='20%'>Username:</td>");
out.println("<td>" + user.getUserName() + "</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>Age:</td>");
out.println("<td>" + user.getAge() + "</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>Email:</td>");
out.println("<td>" + user.getEmail() + "</td>");
out.println("</tr>");
out.println("</table>");
}catch(Exception e){
System.out.println("出错啦!");
throw new JspException(e.getMessage());
}
return SKIP_BODY;
}
@Override
//在结束标签之前调用,返回SKIP_PAGE跳过整个jsp页面后面的输出,返回EVAL_PAGE执行页面余下部分
public int doEndTag() throws JspException {
return EVAL_PAGE;
}
@Override
//生命周期结束时调用
public void release() {
super.release();
this.user = null;
}
//getter and setter
public Userinfo getUser(){
return user;
}
//setPageContext() 将所在jsp页面的pageContext注入进来,目的是为了在后面的方法中可以访问到jsp页面对象的pageContext属性
//setParent() 设置此标签的父标签
//setAttribute() 将标签中的属性注入到此class的属性,不需要自己实现但要提供属性的get与set方法
public void setUser(Userinfo user){
this.user = user;
}
}
5.在WEB-INF目录下创建标签文件tag.tld,文件内容如下:
<?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"> -->
<taglib version="2.0" 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 web-jsptaglibrary_2_0.xsd">
<!-- 自定义自定义标签的版本 -->
<tlib-version>1.0</tlib-version>
<!-- 标签库要求的JSP规范版本 -->
<jsp-version>2.0</jsp-version>
<!-- JSP页面编写工具可以用来创建助记名的可选名字 -->
<short-name>cc</short-name>
<!-- 唯一标识该标签库的的URI(自定义) -->
<uri>http://www.tag.mytag.com/</uri>
<tag>
<!-- 唯一标签名 -->
<name>dispuserinfo</name>
<!-- 标签类的完全限定名 -->
<tag-class>com.util.taglib.Tag</tag-class>
<!-- 正文内容类型:如果不需要标签体则设置empty,反之设定jsp -->
<body-content>empty</body-content>
<!-- 由工具显示的可选名 -->
<display-name>disname</display-name>
<!-- 可以由工具使用的小图标 -->
<!-- <small-icon>aa</small-icon> -->
<!-- 可以由工具使用的大图标 -->
<!-- <large-icon>bb</large-icon> -->
<!-- 可选的标签特定的信息 -->
<!-- <description>descinfo</description> -->
<!-- 可选的脚本变量信息 -->
<!-- <variable>param</variable> -->
<!-- 标签属性信息(如果有的话) -->
<attribute>
<!-- 指定标签名 -->
<name>user</name>
<!-- 是否是必须,如果非必须没设置则为空 -->
<required>false</required>
<!-- 是否可在属性中使用表达式 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<!-- Listener元素(标签库可以指定一些事件监听器类,Web容器将初始化监听器类并以类似在WAR级定义的监听器的方式注册它们,必须包含监听类的完全限定名) -->
<!-- <listener>
<listener-class>com.servlet.taglibServlet</listener-class>
</listener>
<listener>
<listener-class>com.servlet.otherServlet</listener-class>
</listener>
-->
<!-- 自定义的函数库 -->
<function>
<!-- 自定义标签函数功能名(与方法名称可以不同) -->
<name>currentTime</name>
<!-- 自定义标签函数所在的类全路径 -->
<function-class>com.util.taglib.Tagutil</function-class>
<!-- 自定义标签所在类方法名 -->
<function-signature>java.lang.String curTime()</function-signature>
</function>
<function>
<name>welcomeInfo</name>
<function-class>com.util.taglib.Tagutil</function-class>
<function-signature>java.lang.String welcomeInfo(java.lang.String)</function-signature>
</function>
</taglib>
6.在web.xml配置文件中配置自定义标签,配置代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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-app_2_5.xsd">
<!-- 自定义标签 -->
<jsp-config>
<taglib>
<!-- 标签库的uri路径,即jsp头文件中声明<%@ taglib uri="http://www.tag.mytag.com/" prefix="cc"%>的uri -->
<taglib-uri>http://www.tag.mytag.com/</taglib-uri>
<!-- tld文件所在的位置 -->
<taglib-location>/WEB-INF/tag.tld</taglib-location>
</taglib>
</jsp-config>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
7.在JSP页面中引入相关类及自定义标签,并为bean对象赋值,如下:
<%@ page language="java" import="java.util.*,com.util.bean.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.tag.mytag.com/" prefix="cc" %>
<%
Userinfo user = new Userinfo();
user.setUserName("花无影");
user.setAge(20);
user.setEmail("wangyi@163.com");
pageContext.setAttribute("userinfo",user);
%>
8.使用自定义标签进行页面输出,如下:
<body>
<center><h1>JSTL自定义标签</h1></center>
<hr>
<center><font color="red"><h2><b>1.自定义标签</b></h2></font></center>
<cc:dispuserinfo user="${pageScope.userinfo}"/><br>
<hr>
<center><font color="red"><h2><b>2.自定义函数库</b></h2></font></center>
当前访问系统时间:${cc:currentTime() }<br>
${cc:welcomeInfo("花无影") }
<hr>
</body>
9.页面显示结果如图:
到此结束!
(注:由于本人水平有限,写的不好还望各位朋友见谅,欢迎各位提出宝贵意见)
- 大小: 7.7 KB
分享到:
相关推荐
JSP自定义标签JSP自定义标签JSP自定义标签JSP自定义标签JSP自定义标签JSP自定义标签
本人自行研究JSP自定义标签的学习笔记 目录如下: 目录 一、概述 1 1.1 使用简单标签机制 2 1.2 使用标签文件 3 二 、自定义标签简介 3 2.1 自定义标签概念 3 2.2 标签相关概念 3 2.3 如何创建自定义标签 3 三、自...
jsp 自定义标签 一个简单的自定义标签实现
jsp自定义标签jsp自定义标签jsp自定义标签
在网上学习jsp自定义标签的时候, 出现了异常, 在网上寻找了好久, 都没有找到合适的答案, 自己通过摸索最后成功, 分享给大家, 希望能够帮助到你, 自定义标签不能放在java Project中, 只能在java web Project中才可以.
jsp自定义标签jsp自定义标签jsp自定义标签jsp自定义标签
使用jsp自定义标签的功能实现权限的控制。(如果用户没有某个模块的删除权限,就不现实这个删除按钮) 在整个项目中所有的页面都可以引入自定义的标签去做到权限的控制。 自定义标签文件 删除 可以控制页面中的每...
jsp自定义标签库实现数据列表显示,包括代码,文档,希望对大家有帮助.
jsp自定义标签例子,能在Tomcat下直接运行 具体讲解参考 http://blog.csdn.net/zwhfyy/archive/2008/06/13/2543904.aspx
权威实用的jsp自定义标签demo,checkbox,radio> 导入eclipse 部署 看效果吧 带源代码哦
是用jsp自定义标签编写的一个非常不错的分页,扩展性非常不错,不依赖于数据库。
JSP自定义标签。在自定义标签的起始和结束标签之间的部分为标签体(Body)。 标签处理程序类:定义标签的行为,并在JSP引擎遇到自定义标签时调用执行。 标签库描述符(TLD)文件:描述标签库的XML文档,向JSP引擎...
jsp初学者实例,以及分页封装,下拉框绑定值封装
jsp自定义标签,比如说if,foreach,out,format
java jsp自定义标签非常好用大家下载学习java jsp自定义标签非常好用大家下载学习java jsp自定义标签非常好用大家下载学习java jsp自定义标签非常好用大家下载学习java jsp自定义标签非常好用大家下载学习java jsp...
创建JSP自定义标签.doc 创建JSP自定义标签.doc 创建JSP自定义标签.doc