- 浏览: 1359870 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (453)
- Struts2 (4)
- Struts1 (16)
- Spring (9)
- Hibernate (5)
- AJAX (16)
- MS Server (9)
- Oracle (35)
- 测试技术 (5)
- 其他 (37)
- JSF (1)
- EJB (5)
- ASP.NET (9)
- iBATIS (5)
- Struts Spring Hibernate (2)
- HTML (12)
- Eclipse使用 (5)
- 设计模式 (5)
- JSP (32)
- 正则表达式 (2)
- 服务器 (12)
- Java基础 (48)
- MySQL (4)
- 面试 (22)
- UML (1)
- 数据结构 (3)
- Ant (2)
- 规范 (4)
- JavaScript (29)
- 软件使用及技巧 (25)
- PHP (1)
- DWR (3)
- FreeMarker (1)
- ExtJs (17)
- JFreeChart (9)
- Reports (2)
- JavaException (1)
- Java Mail (1)
- Flex (9)
- 异常 (12)
- Log4j (2)
- WebService (1)
- jQuery (1)
- Sybase (2)
- myeclipse_plugin (2)
- Linux (5)
- jbpm (2)
- SCM (1)
- mongoDB (1)
最新评论
-
lihua2008love:
<typeAlias alias="User& ...
IBATIS简单操作 -
lihua2008love:
...
关于项目框架设计的一点学习 -
c_jinglin:
我使用<OBJECT CLASSID="cls ...
这就是个静态页面通过js控制mscomm对某com设备进行访问的例子. -
zlbjava:
赞,用了还不错
java获取请求的ip地址,并解析ip所属地区 -
完美天龙:
cs842813290 写道楼主,我明白的地方:在链表已有N个 ...
JAVA实现双向链表
在JSP2.0 中,对于自定义的标签有两种实现方法,实现接口或者继承现有的类
如下图,标注蓝色的是接口,其它是标签类(SimpleTagSupport只在JSP2.0中才有)
在以上接口和类中,定义了一些静态常量,如下:
Tag 中定义:
SKIP_BODY = 0; // 不处理标签体,直接调用doEndTag()方法
EVAL_BODY_INCLUDE = 1; // 解析标签体,但绕过 doInitBody () 和 setBodyContent () 方法
SKIP_PAGE = 5; // 不解析标签后面的JSP内容
EVAL_PAGE = 6; // 解析标签后,继续解析标签后面的JSP内容
IterationTag 中定义:
EVAL_BODY_AGAIN = 2;
BodyTag 中定义:
EVAL_BODY_TAG = 2; // deprecated
EVAL_BODY_BUFFERED = 2; //
特别的,对于EVAL_BODY_AGAIN和EVAL_BODY_BUFFERED:
在doAferBody中返回SKIP_BODY,表示终止标记正文处理;若返回的是 EVAL_BODY_BUFFERED ,将会再一次调用doAferBody方法,重新处理标记正文,直到返回SKIP_BODY为止。 // ①
TagSupport 默认doStartTag()/doAfterBody()返回SKIP_BODY
BodyTagSupport 默认doStartTag()返回EVAL_BODY_BUFFERED / doInitBody()什么也不做 /doAfterBody()返回SKIP_BODY
下面是自定义tag的执行过程(由上至下),对于以上各常量的实际运用为:
注意其中的 doInitBody/setBodyContent 方法在自定义标签实现了 BodyTag 接口或继承BodyTagSupport才可以使用
Tag 方法 |
可返回的静态常量 |
doStartTag |
SKIP_BODY 、EVAL_BODY_INCLUDE、 EVAL_BODY_AGAIN/EVAL_BODY_BUFFERED |
doInitBody |
做标签一些初始化工作,无返回值 |
setBodyContent |
在 doInitBody 之后执行,使用setBodyContent得到JSP页面中标签体之间内容 |
doAfterBody |
最终必须返回SKIP_BODY ,否则可能导致OutOfMemoryError,可参考上面① |
doEndTag |
SKIP_PAGE/EVAL_PAGE |
附 ① 示例代码如下:
public int doAfterBody() throws JspException {
try {
this.pageContext.getOut().write("<br>");
} catch (IOException e) {
e.printStackTrace();
}
if(cou>1){
cou--;
return this.EVAL_BODY_AGAIN;
}else{
return this.SKIP_BODY; // 最终必须返回SKIP_BODY
}
}
自定义标签的开发包括:
1. 开发标签的处理程序(java类)
2. .tld 文件中指定标签使用的类
3. 在web.xml中指定JSP中使.tld(标签库描述文件)文件的位置。
在.tld文件中
<tag>
<name>out</name>
<tag-class>org.apache.taglibs.standard.tag.el.core.OutTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
body-content :
根据web-jsptaglibrary_2_0.xsd(位于servlet-api.jar包($TOMCAT_HOME\common\lib)中的\javax\servlet\resources下,其中web.xml验证时所需要的xsd文件都位于此resources目录下), body-content 的值有下面4种:
<xsd:enumeration value="tagdependent"/> <xsd:enumeration value="JSP"/> <xsd:enumeration value="empty"/> <xsd:enumeration value="scriptless"/> |
tagdependent : 标签体内容 直接被写入BodyContent,由自定义标签类来进行处理,而不被JSP容器解释,
如下:
<test:myList>
select name,age from users
</test:myList>
JSP : 接受所有JSP语法,如定制的或内部的tag、scripts、静态HTML、脚本元素、JSP指令和动作。如:
<my:test>
<%=request.getProtocol()%> // ②
</my:test>
具体可参考后面附源码。
empty : 空标记,即起始标记和结束标记之间没有内容。
下面几种写法都是有效的,
<test:mytag />
<test:mytag uname="Tom" />
<test:mytag></test:mytag>
scriptless : 接受文本、EL和JSP动作。如上述②使用<body-content> scriptless </body-content> 则报错,具体可参考后面附源码。
rtexprvalue:
由请求时表达式来指定属性的值,默认为false,如下必须设置为true:
<test:welcome uname="<%=request.getParameter("username") %>" />
附body-content为 JSP/scriptless 时标签体可以接受的代码(jasper-compiler.jar包 ($TOMCAT_HOME\common\lib)中 的\org\apache\jasper\compiler\Parser.java中):
JSP:
private void parseElements(Node parent)
throws JasperException
{
if( scriptlessCount > 0 ) {
// vc: ScriptlessBody
// We must follow the ScriptlessBody production if one of
// our parents is ScriptlessBody.
parseElementsScriptless( parent );
return;
}
start = reader.mark();
if (reader.matches("<%--")) {
parseComment(parent);
} else if (reader.matches("<%@")) {
parseDirective(parent);
} else if (reader.matches("<jsp:directive.")) {
parseXMLDirective(parent);
} else if (reader.matches("<%!")) {
parseDeclaration(parent);
} else if (reader.matches("<jsp:declaration")) {
parseXMLDeclaration(parent);
} else if (reader.matches("<%=")) {
parseExpression(parent);
} else if (reader.matches("<jsp:expression")) {
parseXMLExpression(parent);
} else if (reader.matches("<%")) {
parseScriptlet(parent);
} else if (reader.matches("<jsp:scriptlet")) {
parseXMLScriptlet(parent);
} else if (reader.matches("<jsp:text")) {
parseXMLTemplateText(parent);
} else if (reader.matches("${")) {
parseELExpression(parent);
} else if (reader.matches("<jsp:")) {
parseStandardAction(parent);
} else if (!parseCustomTag(parent)) {
checkUnbalancedEndTag();
parseTemplateText(parent);
}
}
Scriptless:
private void parseElementsScriptless(Node parent)
throws JasperException
{
// Keep track of how many scriptless nodes we've encountered
// so we know whether our child nodes are forced scriptless
scriptlessCount++;
start = reader.mark();
if (reader.matches("<%--")) {
parseComment(parent);
} else if (reader.matches("<%@")) {
parseDirective(parent);
} else if (reader.matches("<jsp:directive.")) {
parseXMLDirective(parent);
} else if (reader.matches("<%!")) {
err.jspError( reader.mark(), "jsp.error.no.scriptlets" );
} else if (reader.matches("<jsp:declaration")) {
发表评论
-
Web开发通用监控类解决方案(代码零侵入性)
2009-07-01 14:00 1217我们开发网站的过程中,经常会碰到这种情况,当调用某个类中函数的 ... -
java获取请求的ip地址,并解析ip所属地区
2009-06-01 09:05 9098每次看见QQ上面能够显示对方的ip和地址让人觉得舒服。。刚刚无 ... -
jsp是上传图片加水印
2009-05-05 14:46 1549参考附件. -
JSP 中路径相关的常用解决办法
2009-04-22 15:58 1942<%@ page language="ja ... -
Jsp页面弹出输入对话框的实现收藏
2009-01-16 16:48 4014在写JSP页面的时候,有时需要点击一个按钮弹出一个输入对话框, ... -
log4j xml配置详解
2008-12-30 08:07 15574<?xml version="1.0" ... -
一个关于java.net.Socket的超时的问题
2008-12-26 10:44 5051从异常信息中,可以看到是read timed out,应该是S ... -
防止刷新带来的重复提交
2008-10-08 14:17 1537------------------------------- ... -
防止盗链
2008-09-04 22:28 1599<%=request.getHeader("R ... -
ip 验证
2008-08-31 23:38 1236if(kk_BlacklistVehicle_UserEnro ... -
用户登陆 封装
2008-08-31 23:37 1201首先要有一个封装类,我用UserInfo package d ... -
加密算法SHA-1,SHA-256,SHA-512,MD2,MD5
2008-08-31 23:33 6206自定义某种算法 package test; ... -
Java 调用 Oracle 存储过程返回结果集
2008-08-12 08:16 2609Oracle 存储过程返回结果集用 ref cursor 实现 ... -
分页技术
2008-07-19 11:33 1422在使用数据库的过程中,不可避免的需要使用到分页的功能,可是JD ... -
对分页的封装
2008-07-16 19:59 1894package com.bjsxt.oa.web; im ... -
Pagger-taglib分页
2008-07-16 17:57 1428<%@ page language="java ... -
JavaScirpt和JSP数据数据交互使用问题
2008-07-03 21:53 1517一、页面中的JavaScript的数据如何提交给后台的jsp程 ... -
用Cookie实现的购物车
2008-07-02 23:17 8319Cusorderitem.java 封装了相关的商品购买信息 ... -
Servlet中文API文档
2008-06-30 14:08 4170基本类和接口 一、javax. ... -
控制 Web 缓存
2008-06-19 21:11 1304控制 Web 缓存 假设两个并发用户(用户 A 和用户 ...
相关推荐
在JSP2.0技术规范中,引入了一种新的标签机制,被称为Tag Files(标签文件),其主要目标是为了解决传统JSP页面中脚本元素的使用问题,提供一个更为简洁和高效的方式来进行页面动态内容的添加。开发者可以利用标签...
本资料包“JSP学习笔记”提供了丰富的学习资源,适用于初学者和有一定经验的开发者,用以提升对JSP的理解和应用能力。 ### 1. JSP基本概念 - **页面组成**:JSP页面由静态内容(HTML、CSS、JavaScript)和动态内容...
"jsp完全学习手册"是一本全面覆盖JSP技术的资源,旨在帮助你从零基础开始,逐步掌握这门强大的Web开发工具。让我们一起探索JSP的核心概念、特性以及实际应用。 首先,了解JSP的基本原理至关重要。JSP是一种基于Java...
《jsp完全学习手册》是针对JavaServer Pages(JSP)技术的一本全面教程,由清华大学出版社出版。这本书涵盖了从基础到高级的JSP知识,旨在帮助读者深入理解并掌握JSP开发技能。2-23章的代码包含了书中实例的源代码,...
**JSP基础学习知识点概述** JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML、XML或其他标记语言中嵌入Java代码,从而实现服务器端的动态内容生成。本资源提供了JSP基础学习的课堂源码,以及一个...
本"JAVA_JSP学习系列"着重于为初学者提供深入浅出的学习资源,通过实例教学,帮助读者快速掌握JSP的核心概念和实践技巧。 首先,JSP是Java平台上的一个标准,用于开发服务器端应用程序,特别是Web应用。它允许...
【JSP基础学习】 JSP(JavaServer Pages)是Java平台上的动态网页技术,它允许开发者将静态HTML、XML或者JavaScript代码与动态Java代码结合在一起,以创建交互式的Web应用程序。JSP技术由Sun Microsystems(现已被...
《JSP完全学习手册》是一本全面覆盖JSP(Java Server Pages)技术的教程,旨在帮助初学者和进阶者深入理解并掌握JSP的核心概念和技术。这本书通过10个章节的内容,逐步引导读者从基础到高级,系统地学习JSP的各个...
5. **EL(Expression Language)和JSTL(JSP Standard Tag Library)**:介绍EL作为简化数据访问的表达式语言,以及JSTL提供的各种标签库,如核心标签库、XML处理标签库等,它们可以提高代码的可读性和可维护性。...
7. **JSTL(JSP Standard Tag Library)**: - JSTL是一组标准的标签库,提供了循环、条件判断、XML处理等功能,减少Scriptlets的使用。 8. **Servlet和JSP的关系**: - JSP最终被编译成Servlet,两者都是JavaEE...
**正文** 《Manning - JSP Tag Libraries》这本书深入探讨了JavaServer Pages (JSP) 标签库这一核心主题,对于理解并...通过学习和实践,我们可以充分利用JSP标签库的力量,构建更加高效、灵活且易于维护的Web应用。
**JSP学习电子教案JSP** 本资源是一个针对JavaServer Pages (JSP)技术的电子教案,由CSDN推荐并被用户评价为价值颇高的学习资料。它旨在帮助初学者和进阶者更好地理解和掌握JSP编程,使得学习过程更为轻松。在本文...
9. JSP标签库:可能还会介绍自定义标签的使用,以及标准标签库如JSTL(JavaServer Pages Standard Tag Library)的应用。 通过这个【深度学习JSP留言板】教程,你不仅可以学习到JSP的基础知识,还能实践如何将这些...
- 了解JSP与JSTL(JavaServer Pages Standard Tag Library)以及表达式语言(Expression Language, EL)的结合使用,提高JSP页面的可读性和可维护性。 3. Servlet和JSP的整合应用 - 通过具体的项目案例,学习如何...
【JSP基础学习】 JSP(JavaServer Pages)是Java平台上的动态网页技术,它允许开发者将静态HTML、XML或自定义标记与Java代码混合在一起,以创建动态内容。JSP是Servlet技术的一种简化,其本质是Servlet,但提供了一...
除了上述基础语法,JSP还支持EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library),它们提供了更简洁的表达式和标准标签库,使JSP代码更加简洁和易读。 在实际开发中,通常推荐使用JSP的...
**JSP标签库详解** JSP(JavaServer Pages)是一种动态网页技术,它允许开发者将HTML、CSS和Java代码结合在一起,以创建交互式的...通过深入学习和实践,开发者能够更好地利用JSP标签库提高Web应用的开发效率和质量。
【JSP基础教学详解】 JavaServer Pages(JSP)是一种基于Java...通过深入学习这些基础概念和实践,你可以逐步掌握JSP编程,为构建动态、交互性强的Web应用打下坚实基础。不断练习和实践,你将在JSP的世界里游刃有余。
7. **JSTL(JavaServer Pages Standard Tag Library)**:一套标准标签库,用于简化JSP页面的编程,包括核心标签、XML标签、函数标签等,可以替代部分脚本元素。 8. **MVC模式**:在JSP中,通常结合Servlet和JSP...