2

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

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

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

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

4

1 回答 1

3

servlet 容器可能会也可能不会池化标记实例(根据 Java Servlet 规范)。解决问题的最佳方法应该是修复标签的编写方式。在您的情况下,可能会在doEndTag()方法中进行清理(将可选参数设置为 null)。

如果这不可行,您可以通过将其放入 Tomcat 安装中来禁用 Tomcat 中的标签池conf/web.xml

 <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>
于 2012-08-22T17:57:17.420 回答