我们有一个使用jsp自定义标记的网络应用。我们在Weblogic 10和Tomcat 6上运行它。有些标签在Tomcat中不起作用。我们将错误跟踪到Weblogic和Tomcat之间的以下区别。
在Weblogic中,jsp中每次出现标记时都会调用jsp自定义标记的构造函数。在Tomcat中,无论在jsp页面上使用多少次标记,jsp自定义标记的构造函数在标记的第一次出现时只被调用一次。
因此,在Tomcat中,由于我们的jsp自定义标记具有一些可选属性,因此标记的后续调用将重新使用先前调用中指定的值。在Weblogic中,每次出现都会调用标记的构造函数,因此在jsp页面中每次出现标记时都会将标记初始化为默认值。
有没有人知道一种方法(通过tomcat配置文件条目,web.xml条目等)告诉Tomcat每次在jsp页面上遇到jsp自定义标记时实例化一个新的Tag对象?
答案 0 :(得分:1)
servlet容器可能会也可能不会池化标记实例(根据Java Servlet规范)。解决问题的最佳方法应该是修复标记的编写方式。在你的情况下,它可能是在doEndTag()
方法中进行清理(将可选参数设置为null)。
如果这不可行,您可以通过将其添加到Tomcat安装的conf/web.xml
来禁用Tomcat中的标记池:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
(...)
<init-param>
<param-name>enablePooling</param-name>
<param-value>false</param-value>
</init-param>
(...)
</servlet>