Tag13.java
package tag13;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import java.io.IOException;
import java.util.List;
import java.util.Iterator;
public class Tag13 extends BodyTagSupport {
private List lists;
private Iterator iters;
public void setLists(List lists){
this.lists = lists;
}
public int doStartTag() throws JspException {
return EVAL_BODY_BUFFERED;
}
public void doInitBody() throws JspException {
if (lists.size() <= 0) return;
iters = lists.iterator();
pageContext.setAttribute(this.id, iters.next());
}
public int doAfterBody() throws JspException {
if (iters.hasNext()) {
pageContext.setAttribute(this.id, iters.next());
return EVAL_BODY_AGAIN;
} else {
try {
bodyContent.writeOut(this.getPreviousOut());
} catch (IOException ioe) {
throw new JspException(ioe.getMessage());
}
}
return SKIP_BODY;
}
}
Info13.java
package tag13;
import javax.servlet.jsp.tagext.TagData;
import javax.servlet.jsp.tagext.TagExtraInfo;
import javax.servlet.jsp.tagext.VariableInfo;
public class Info13 extends TagExtraInfo {
public VariableInfo[] getVariableInfo(TagData data) {
return new VariableInfo[] {
new VariableInfo(data.getId(),
"java.lang.Object",
true,
VariableInfo.NESTED)
};
}
}
tag13.tld
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC '-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN' 'http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd'>
<taglib>
<tlib-version>1.2</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>aaaaaaaaaaaaaaa</short-name>
<info>aaaaaaaaaa</info>
<tag>
<name>tag13</name>
<tag-class>tag13.Tag13</tag-class>
<tei-class>tag13.Info13</tei-class>
<body-content>JSP</body-content>
<attribute>
<name>id</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>lists</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
tag13.jsp
<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib prefix="tag" uri="tag13.tld" %>
<%@ page import="java.util.List,
java.util.ArrayList"
%>
<html>
<body>
<%
List mylists = new ArrayList();
mylists.add("aaaaaaaaaaaaaaa");
mylists.add("bbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
mylists.add("ccccccccccccccccccccccccccccccccccc");
mylists.add("dddddddddddddddddddddddddddddddddddddddddddd");
%>
<table width="300" border="5">
<tag:tag13 id="iter" lists="<%=mylists%>">
<tr><td><%=iter%></td></tr>
</tag:tag13>
</table>
</body>
</html>
结果:
aaaaaaaaaaaaaaa |
bbbbbbbbbbbbbbbbbbbbbbbbbbbbb |
ccccccccccccccccccccccccccccccccccc |
dddddddddddddddddddddddddddddddddddddddddddd |
分析:
1、在标记类中每次计算Body时,以标记类的ID为key保存bean到PageContext中,然后在JSP页面中直接访问这个bean。
2、由于标记类的ID属性由TagSupport类和BodyTagSupport类进行维护,因此程序员在自己定制的标记类中无须另设定一个ID属性。
分享到:
相关推荐
- 示例中可能包含如何从数据库获取数据,进行分页展示,使用`<c:forEach>`实现循环遍历。 10. **安全与性能优化** - 避免在JSP中写过多业务逻辑,保持JSP页面的清洁,提升维护性和性能。 - 使用session管理用户...
1. **JSP脚本元素**:包括脚本声明、脚本表达式和脚本段。脚本声明可以声明变量和方法,脚本表达式用于输出Java表达式的值,脚本段可以包含复杂的Java代码。 2. **自定义标签**:通过创建TLD(Tag Library ...
4. **脚本元素**:`<scriptlet>`、`<declaration>` 和 `<expression>` 是JSP脚本元素,其中 `<scriptlet>` 用于插入Java代码块,`<declaration>` 用于声明变量或方法,`<expression>` 则用于插入Java表达式结果。...
JSP脚本元素** 包括`<scriptlet>`, `<declaration>`, 和`<expression>`。`<scriptlet>`包含Java代码片段,`<declaration>`声明变量或方法,`<expression>`用于输出表达式的值。 **6. JavaServer Pages Standard ...
在这个例子中,我们看到了如何使用JavaBean在JSP(JavaServer Pages)中进行数据库操作,主要涉及了JDBC(Java Database Connectivity)技术。首先,我们要理解JSP和JavaBean的概念。 JSP是一种基于Java的服务器端...
4. **JSP脚本元素**: 脚本元素包括声明、脚本片段和表达式。声明部分可以定义变量和方法,但不会直接输出。脚本片段可以包含任何合法的Java代码,常用于逻辑控制和数据处理。表达式则会将Java表达式的值转换为字符...
**JSP标准标记库(JSTL)详解** 在Java Web开发中,JSP(JavaServer Pages)是一种常用的动态网页技术,它允许开发者在HTML页面中嵌入Java代码,实现服务器端的逻辑处理。然而,直接在JSP页面中编写Java代码会使得...
- 使用`<c:forEach>`遍历集合,`<c:if>`进行条件判断,`<c:set>`设置变量等。 6. **分离逻辑和展示** - 业务逻辑应放在JavaBean或Servlet中,JSP仅负责显示数据,遵循MVC模式。 - 使用Model2架构,提高代码的可...
**JSP网上书店系统——基于JSP的CRUD操作详解** 在Web开发中,"增、删、改、查"(Create, Read, Update, Delete,简称CRUD)是最基本的操作,也是任何业务系统的核心功能。JSP(JavaServer Pages)作为Java平台上的...
使用JSTL可以简化JSP页面的编程,例如,我们可以用 `<c:forEach>` 来遍历集合,`<c:if>` 进行条件判断,`<c:url>` 和 `<c:param>` 创建URL和添加参数。 **8. CSS和JavaScript** 为了提供良好的用户体验,博客系统...
脚本元素包括脚本声明(declarations)、脚本表达式(expressions)和脚本片段(scriptlets),它们分别用于定义变量、输出数据和编写复杂的Java代码。动作元素如`<jsp:forward>`和`<jsp:include>`则用于控制页面...
- **业务逻辑**:JSP脚本元素可以处理用户的交易请求,如登录验证、购物车管理、支付接口调用等。 - **会话管理**:使用JSP内置对象session,跟踪用户状态,实现购物车的持久化。 - **异常处理**:利用JSP的错误...
在 JSP 中,可以使用循环语句来遍历数据,例如 `for` 语句和 `while` 语句。但是在本实验中没有使用循环语句。 本实验报告 + 登录系统的制作课程涵盖了 JSP 的基本结构、Session 的使用、Redirect 的使用、Form ...
1. **过度使用脚本可能导致混乱:** 如果在JSP页面中混杂过多的Java代码,可能会降低代码的可读性和维护性。 2. **性能:** 相比于纯Servlet,JSP的翻译和编译过程会增加一些开销。 总的来说,JSP是Java Web开发中...
【JSP脚本元素和指令】 在JSP页面中,我们可以使用以下几种脚本元素: - **<% %>:** 脚本片段,可以包含任何Java代码,通常用于控制逻辑。 - ****: 表达式,会将Java表达式的值转换为字符串并插入到HTML输出中。 -...
JSTL提供了一系列预定义的标签,减少了在JSP页面中使用脚本的需要,提高了代码的可读性和可维护性。例如,`<c:forEach>`用于遍历集合,`<fmt:formatDate>`用于格式化日期。 **6. Servlet与JSP的关系** Servlet是...
6. **JSTL(JavaServer Pages Standard Tag Library)**:为了减少JSP页面中的Java代码,可以使用JSTL标签库,如`<c:forEach>`遍历数组,`<fmt:formatDate>`格式化日期。 7. **EL(Expression Language)**:EL用于...
EL表达式可以替代传统的JSP脚本,提高页面的可读性和维护性。 1. **EL基础语法**: - 语法:`${expression}` - 示例: - 访问bean的属性: ```jsp ${user.name} ``` 2. **EL运算符**: - 算术运算符:`+`, ...
- **商品展示**:通过数据库查询获取商品信息,并使用JSP显示在网页上,可能结合EL和JSTL进行数据遍历和格式化。 - **购物车**:利用session存储用户购物车信息,JSP页面可以实时更新购物车状态,如添加、删除商品...
在JSP中,开发者可以使用不同的元素来控制页面的行为,包括脚本元素、指令、动作和注释。 **脚本元素**: - **声明(Declaration)**:如`!int counter=0%>`,用于声明变量和方法,作用域仅限当前页面。 - **...