【问题标题】:jsp custom tags in Tomcat - tag instantiationTomcat中的jsp自定义标签——标签实例化
【发布时间】:2012-08-18 04:54:21
【问题描述】:

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

【问题讨论】:

    标签: jakarta-ee tomcat jsp-tags


    【解决方案1】:

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2011-04-19
      相关资源
      最近更新 更多