keywords weblogic Tag BodyTag BodyTag.EVAL_BODY_BUFFERED
问题描述 在weblogic下部署工程时报以下错误 但在Tomcat下不会报错
javax.servlet.jsp.JspTagException: Since tag class com.szkd.tags.ListOne does not implement BodyTag, it cannot return BodyTag.EVAL_BODY_BUFFERED
at jsp_servlet._page._kd._dict.__dict._jsp__tag4(__dict.java:454)
at jsp_servlet._page._kd._dict.__dict._jspService(__dict.java:251)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:391)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:309)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.szkd.filter.UserSessionFilter.doFilter(UserSessionFilter.java:134)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.szkd.filter.UserSessionFilter.doFilter(UserSessionFilter.java:134)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.szkd.filter.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:36)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.szkd.filter.CharsetFilter.doFilter(CharsetFilter.java:31)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3368)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2117)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2023)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1359)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)
后来发现是我的自定义标签中的doStartTag()方法的返回值写错了
public int doStartTag() throws JspException
{
MyResult rs = (MyResult )pageContext.getAttribute(this.name);
if (rs == null)
{
throw new JspTagException("XXX");
}
List listResult = (List)rs.getResult();
if (listResult == null)
{
return SKIP_BODY;
}
itList = listResult.iterator();
if (itList.hasNext())
{
pageContext.setAttribute(var,itList.next());
pageContext.setAttribute(next, new Integer(nRow));
nRow++;
return EVAL_BODY_AGAIN;
//这一句返回值错了 原来返回的是 EVAL_BODY_AGAIN
//但不知为什么在tomcat中不会报错
}
else
{
return SKIP_BODY;
}
}
下面部分是从网上搜到的 转自 http://hi.baidu.com/yuweiming/blog/item/48bb6c2219d0c1a34723e82b.html
载BodyTagSupport类的方法:
编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(),
setBodyContent(), doInitBody(), doAfterBody(), doEndTag();
他们执行顺序如下:
doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag()
doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY,
如果返回EVAL_BODY_INCLUDE
则继续执行;
如果返回SKIP_BODY
则接下来的doInitBody(),setBodyContent(),
doAfterBody()三个方法不会被执行,
而直接执行doEndTag()方法。
setBodyContent()方法用于设置标签体内容,如果在此之前要作一些初始化工作,则在doInitBody()方法中完成。
标签体内容执行完后,会调用doAfterBody()方法,此方法可返回EVAL_BODY_TAG
, SKIP_BODY
,
EVAL_PAGE
或SKIP_PAGE
。
如果返回EVAL_BODY_TAG
则会再次设置标签体内容,直到返回SKIP_BODY;
如果返回EVAL_PAGE
则标签体执行完后会继续执行JSP页面中接下来的部分;
如果返回SKIP_PAGE
,则JSP页面的后续内容将不再执行。
标签中静态常量:
EVAL_BODY_INCLUDE
:告诉服务器正文的内容,并把这些内容送入输出流
SKIP_BODY
:告诉服务器不要处理正文内容
EVAL_PAGE
:让服务器继续执行页面
SKIP_PAGE
:让服务器不要处理剩余的页面
EVAL_BODY_AGAIN
:让服务器继续处理正文内容,只有doAfterBody方法可以返回
EVAL_BODY_BUFFERED
:BodyTag接口的字段,在doStartTag()返回
EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由
doEndTag()返回。
分享到:
相关推荐
定义了一个自定义标签库的URI和TLD文件位置。 以上只是`web.xml`配置的基本示例,实际配置可能更复杂,涉及到更多元素和属性,例如安全、MIME类型映射、本地化支持等。 **`server.xml`配置** `server.xml`是Tomcat...
如果应用中使用了自定义标签库,需要引入对应的TLD文件,并在web.xml中声明: ```xml <taglib> <taglib-uri>/myTags</taglib-uri> <taglib-location>/WEB-INF/tlds/mytags.tld</taglib-uri> </taglib> ``` 以上...
- **指令(Directives)**:例如`<%@ page %>`, `<%@ include %>`, 和`<%@ taglib %>`, 它们用于设置整个页面的属性,引入其他文件或注册自定义标签库。 - **动作(Actions)**:如`<jsp:include>`, `<jsp:forward...
在Struts 2中,`Action`执行完毕后通常会返回一个结果,这个结果对应于`struts.xml`配置文件中的`<result>`标签。例如: ```xml <action name="helloWorld" class="com.example.HelloWorldAction"> <result name=...
开发者可以通过实现`javax.servlet.jsp.tagext.Tag`接口或继承`javax.servlet.jsp.tagext.SimpleTagSupport`来创建自定义标签,这些标签可以在JSP页面中像标准标签一样使用。 **八、最佳实践** 1. **代码分离**:将...
JSP标签分为标准标签库(Standard Tag Library, JSTL)和自定义标签。标准标签库提供了一组标准的JSP标签用于迭代、条件判断、国际化和数据库操作等,而自定义标签允许开发者创建自己的标签来封装可重用的代码。 ...
本书从最基础的JSP开发开始,循序渐进地介绍了JSP 开发技术,并涵盖了许多高级主题,如需要在企业级Web应用中使用的特性—Enterprise JavaBeans、JDBC 2.0、数据库连接池和自定义标签库。本书既适合初学者阅读,也...
- **Taglib指令**:用于注册自定义标签库。示例如下: ```jsp <%@ taglib uri="/WEB-INF/tlds/myTags.tld" prefix="mt" %> ``` `uri`属性指定了TLD文件的位置,`prefix`属性定义了一个前缀,用于引用该标签库...
9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 9.5.7. 插入事务操作 9.5.8. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 9.6.1. 使用 ...
9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 9.6.1. 使用 TransactionTemplate 9.6.2. 使用 ...
9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 9.6.1. 使用 TransactionTemplate 9.6.2. 使用 ...
- **JSP标签库(Tag Libraries)**:提供自定义标签,简化页面开发,例如JSTL(JavaServer Pages Standard Tag Library)。 - **Session**:在Web应用中,session用于跟踪用户状态,存储用户信息。 - **EJB...
标签库指令用于引入自定义标签库。 JSP动作标签(JSP Actions)如`<jsp:include>`、`<jsp:forward>`和`<jsp:params>`,用于控制页面流程,如动态包含页面、转发请求和传递参数。 **4. EL表达式和JSTL** EL...
9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知事务操作 9.5.9. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 9.6.1. 使用TransactionTemplate 9.6.2. ...
9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知事务操作 9.5.9. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 9.6.1. 使用TransactionTemplate 9.6.2. ...
动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件...
6. **JSP标签库**:学习使用JSTL(JavaServer Pages Standard Tag Library)和其他自定义标签库,简化JSP页面的编写。 7. **会话管理**:掌握如何在JSP中管理用户的会话状态,以便提供个性化的用户体验。 8. **...
- 可能使用了自定义JSP标签库,如JSTL(JavaServer Pages Standard Tag Library),简化页面逻辑,提高可维护性。 7. **会话管理**: - 使用`session`对象跟踪用户状态,例如保存购物车信息,实现用户登录状态的...
15. `Struts.tag.altSyntax`、`Struts.ui.*`: 这些属性涉及Struts2标签库的配置,如是否启用表达式语法、主题、模板目录等。 16. `Struts.url.*`: 与URL生成和参数包含相关的配置,如http和https端口,以及生成URL...