JSP自制标签。以一只真正的菜鸟角度来审视自制标签。。。
2013-05-29 08:48
495 查看
声明: 我是个新手,文章中有什么写得不正确的欢迎大家指出。共同学习,一起进步。
首先明白:自制标签是一种将动态内容加入到jsp页面的一种方法。类似的方法还有5种,在后面的文章我会介绍。它的好处是:使用起来像HTML标签一样,有利于增强jsp页面的表现逻辑(方便不太懂java的美工吧).
要使用自制标签我们要进行以下3个步骤(其实就是制作自制标签库的3的成员):
1、创建标签库句柄类,它定义了自制标签的行为。
很多术语听上去很高深翻译过来很简单的。所谓句柄类是个啥我也不清楚。但可以肯定的这一步就是写个java类,这个类定义系统看见这个标签的具体行为。
2创建TLD(标签库描述),它把xml元素名字映射到tag实现。
创建个.tld文件。文件的内容和性质和xml很类似
3、jsp页面,写好了自制标签,也配置好了当然就是要使用它了
实例: 这个实例通过自制标签,把一个user类的信息显示在前台页面。
1、
user类
Public class User(){
private String userName;
private String email;
private int age;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
标签库句柄类
package cn.bl.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class UserTag extends TagSupport {
private User user;
public int doStartTag() throws JspException {
// 获取写出对象
JspWriter out = this.pageContext.getOut();
try {
if (user == null) {
out.println("没找到对应的用户");
// 返回这个函数说明你已经标签数据写进jsp页面了
return SKIP_BODY;
} else {
out.println("<strong algin='center'>第一次用自制标签,向jsp写数据。请大家多多指教</strong>");
out.println("<hr>");
out.println("<table width='500px' align='center' border='1'>");
out.println("<tr>");
out.println("<td>用户名</td>");
out.println("<td>年龄</td>");
out.println("<td>邮箱</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>" + user.getName() + "</td>");
out.println("<td>" + user.getAge() + "</td>");
out.println("<td>" + user.getEmil() + "</td>");
out.println("</tr>");
out.println("</table>");
}
} catch (IOException e) {
throw new JspException(e.getMessage());
}
return SKIP_BODY;
}
// getter and setters
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public int doEndTag() throws JspException {
return EVAL_PAGE;
}
@Override
public void release() {
super.release();
this.user = null;
}
}
2创建TLD(标签库描述)
在WEB-INF下新建。
在新建时会让你填入写参数,填入的参数和下面配置文件里的参数是对应的。
<?xml version="1.0" encoding="UTF-8"?>
<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>
<short-name>ff</short-name>
<uri>/firsttag</uri>
<tag>
<name>showUser</name>
<tag-class>cn.bl.tag.UserTag</tag-class>//对应你句柄类所在的包
<body-content>empty</body-content>
<attribute>
<name>user</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
然后在xml里配置
<jsp-config>
<taglib>
<taglib-uri>/firsttag</taglib-uri>
<taglib-location>/WEB-INF/firsttag.tld</taglib-location>
</taglib>
</jsp-config>
3、用jsp显示
注意引入语句
<%@ page language="java" import="java.util.*,cn.bl.tag.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/firsttag" prefix="ff"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!-- 创建需要展现User的实例(用于测试数据) -->
<%
User user = new User();
user.setName("曾花卷");
user.setAge(33);
user.setEmil("ssf@dd.com");
pageContext.setAttribute("userinfo", user);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<!-- 给标签设置user属性绑定要展现的UserInfo对象 -->
<ff:showUser user="${pageScope.userinfo}" />
</body>
</html>
看看效果吧
首先明白:自制标签是一种将动态内容加入到jsp页面的一种方法。类似的方法还有5种,在后面的文章我会介绍。它的好处是:使用起来像HTML标签一样,有利于增强jsp页面的表现逻辑(方便不太懂java的美工吧).
要使用自制标签我们要进行以下3个步骤(其实就是制作自制标签库的3的成员):
1、创建标签库句柄类,它定义了自制标签的行为。
很多术语听上去很高深翻译过来很简单的。所谓句柄类是个啥我也不清楚。但可以肯定的这一步就是写个java类,这个类定义系统看见这个标签的具体行为。
2创建TLD(标签库描述),它把xml元素名字映射到tag实现。
创建个.tld文件。文件的内容和性质和xml很类似
3、jsp页面,写好了自制标签,也配置好了当然就是要使用它了
实例: 这个实例通过自制标签,把一个user类的信息显示在前台页面。
1、
user类
Public class User(){
private String userName;
private String email;
private int age;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
标签库句柄类
package cn.bl.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class UserTag extends TagSupport {
private User user;
public int doStartTag() throws JspException {
// 获取写出对象
JspWriter out = this.pageContext.getOut();
try {
if (user == null) {
out.println("没找到对应的用户");
// 返回这个函数说明你已经标签数据写进jsp页面了
return SKIP_BODY;
} else {
out.println("<strong algin='center'>第一次用自制标签,向jsp写数据。请大家多多指教</strong>");
out.println("<hr>");
out.println("<table width='500px' align='center' border='1'>");
out.println("<tr>");
out.println("<td>用户名</td>");
out.println("<td>年龄</td>");
out.println("<td>邮箱</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>" + user.getName() + "</td>");
out.println("<td>" + user.getAge() + "</td>");
out.println("<td>" + user.getEmil() + "</td>");
out.println("</tr>");
out.println("</table>");
}
} catch (IOException e) {
throw new JspException(e.getMessage());
}
return SKIP_BODY;
}
// getter and setters
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public int doEndTag() throws JspException {
return EVAL_PAGE;
}
@Override
public void release() {
super.release();
this.user = null;
}
}
2创建TLD(标签库描述)
在WEB-INF下新建。
在新建时会让你填入写参数,填入的参数和下面配置文件里的参数是对应的。
<?xml version="1.0" encoding="UTF-8"?>
<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>
<short-name>ff</short-name>
<uri>/firsttag</uri>
<tag>
<name>showUser</name>
<tag-class>cn.bl.tag.UserTag</tag-class>//对应你句柄类所在的包
<body-content>empty</body-content>
<attribute>
<name>user</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
然后在xml里配置
<jsp-config>
<taglib>
<taglib-uri>/firsttag</taglib-uri>
<taglib-location>/WEB-INF/firsttag.tld</taglib-location>
</taglib>
</jsp-config>
3、用jsp显示
注意引入语句
<%@ page language="java" import="java.util.*,cn.bl.tag.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/firsttag" prefix="ff"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!-- 创建需要展现User的实例(用于测试数据) -->
<%
User user = new User();
user.setName("曾花卷");
user.setAge(33);
user.setEmil("ssf@dd.com");
pageContext.setAttribute("userinfo", user);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<!-- 给标签设置user属性绑定要展现的UserInfo对象 -->
<ff:showUser user="${pageScope.userinfo}" />
</body>
</html>
看看效果吧
相关文章推荐
- jsp分页查询与显示,一只纯菜鸟的角度....
- jsp页面表格中<textarea>标签的菜鸟级错误
- 菜鸟求助 MyEclips jsp 标签库URI报错 求解决之道
- Jsp/Java代码分离.实现页面真正的代码分离 实现框架代码,jxui:page标签
- 菜鸟学Android(四十四):jsp标签技术简介及jsp标签的开发详解
- SpringBoot中jsp页面调用iframe标签报Whitelabel Error Page 错误
- jquery动态移除/增加jsp页面标签属性详解
- 关于jsp2.0中简单的自定义标签
- jsp---用标签操作javaBean(动作标签BeanTest.jsp)
- jsp课程(8)---自定义jsp标签
- 在JSP中使用el标签传递值(两个jsp页面之间传值)
- Java web基础总结九之—— jsp标签
- jsp中标签的是如何调用的
- 第九章 JSP标签——《跟我学Shiro》[张开涛]
- JSP标签
- JavaWeb之 JSP:自定义标签
- 自定义标签(JspFragment类、invoke方法、开发带属性的标签)
- JSP 常用标签库
- jsp 常用标签的使用
- JSP自定义标签(带标签体的标签,迭代器标签)