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



我们有一个使用jsp自定义标记的web应用程序。我们正在Weblogic 10和Tomcat6上运行它。有些标记在Tomcat中不起作用。我们将错误追溯到Weblogic和Tomcat之间的以下差异。

在Weblogic中,jsp中每次出现标记都会调用jsp自定义标记的构造函数。而在Tomcat中,jsp自定义标记的构造函数只在标记第一次出现时调用一次,无论标记在jsp页面上使用了多少次。

因此,在Tomcat中,由于我们的jsp自定义标记具有一些可选属性,因此标记的后续调用将重新使用先前调用中分配的值。在Weblogic中,每次出现都会调用标记的构造函数,因此在jsp页面中每次出现标记都会将标记初始化为默认值。

有没有人知道一种方法(通过tomcat配置文件条目、web.xml条目等),告诉tomcat每次在jsp页面上遇到jsp自定义标记时实例化一个新的Tag对象?

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>

最新更新