Tomcat中的jsp自定义标记 - 标记实例化

时间:2012-08-22 17:48:30

标签: java-ee tomcat jsp-tags

我们有一个使用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对象?

1 个答案:

答案 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>