【问题标题】:How do I set Jasper init parameters globally for all servlets in Tomcat's web.xml?如何为 Tomcat 的 web.xml 中的所有 servlet 全局设置 Jasper 初始化参数?
【发布时间】:2013-12-20 15:49:25
【问题描述】:

我正在使用Tomcat's Jasper HowTo 为我的servlet 设置初始化参数。但是我还没有弄清楚如何在 web.xml 文件中全局设置这些参数。如何避免在每个 servlet 描述中重复我的 init-params?

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         metadata-complete="true">

    <servlet>
        <servlet-name>foo</servlet-name>
        <jsp-file>/WEB-INF/foo/foo.jsp</jsp-file>
        <init-param>
            <param-name>compilerTargetVM</param-name>
            <param-value>1.7</param-value>
        </init-param>
    </servlet>

    <servlet>
        <servlet-name>bar</servlet-name>
        <jsp-file>/WEB-INF/bar/bar.jsp</jsp-file>
        <init-param>
            <param-name>compilerTargetVM</param-name>
            <param-value>1.7</param-value>
        </init-param>
    </servlet>

</web-app>

【问题讨论】:

    标签: jakarta-ee tomcat servlets web.xml


    【解决方案1】:

    我相信答案在链接的文档中:

    实现 Jasper 的 servlet 使用全局 $CATALINA_BASE/conf/web.xml 中的 init 参数进行配置

    所以打开这个文件并在 Jasper servlet (&lt;servlet-name&gt;jsp&lt;/servlet-name&gt;) 中添加适当的 init-params。

    这将为整个服务器设置参数。我没有尝试为一个应用程序设置参数; 可能可以重复jsp servlet的声明从全局web.xml到你自己的映射并添加init-params。 (但是,对于您设置的参数compilerTargetVM,将其全局应用于整个服务器确实有意义。)


    我没有可用的 Tomcat,所以我现在使用 Tomcat 版本 7.0.47 进行测试:您可以在应用程序的 web.xml 中添加 &lt;servlet&gt;jsp&lt;/servlet&gt;(从全局 conf/ web.xml 和修改你想要的),它确实工作。 IE。此应用程序中的所有 JSP 都使用所需的 init-params 运行,而其他应用程序不受影响。

    【讨论】:

    • @Nikos:你有没有在文档中找到任何关于这种行为的参考资料?我认为这是一个全局设置,我很惊讶它现在也适用于应用程序 web.xml。在本地尝试过,确实有效。
    • @rlegendi 实际上没有,但我的思考过程是,毕竟 JSP 没什么特别的,而是由 servlet(“jsp”servlet)处理的另一个文件扩展名(&lt;servlet-mapping&gt;&lt;url-pattern&gt;*.jsp)恰好由服务器提供并在服务器级别进行配置。因此,可以覆盖 web-app 级别的配置。这很可能是特定于实现的,因此它适用于 Tomcat现在,但可能不适用于 Jetty 或下一个版本的 Tomcat。
    • @NikosParaskevopoulos:可以接受的推理,非常感谢您的帮助!我会稍微调试一下实现,以便更好地了解 servlet。
    【解决方案2】:

    正如 Nikos 所说,您可以通过编辑 ${TOMCAT_HOME}/conf 目录中的 web.xml 来设置 JspServlet 实例的参数。因此,该属性将在服务器启动期间在org.apache.jasper.servlet.JspServlet 实例中设置。在您的情况下,要设置参数compilerTargetVM,您可以将JspServlet 声明编辑为

    <servlet>
            <servlet-name>jsp</servlet-name>
            <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
            <init-param>
                <param-name>fork</param-name>
                <param-value>false</param-value>
            </init-param>
            <init-param>
                <param-name>xpoweredBy</param-name>
                <param-value>false</param-value>
            </init-param>
            <!-- Added the user parameter -->
              <init-param>
                <param-name>compilerTargetVM</param-name>
                <param-value>1.7</param-value>
            </init-param>
            <load-on-startup>3</load-on-startup>
    </servlet>
    

    希望对你有帮助

    【讨论】:

    • 那么,将这个 servlet 条目添加到我的应用程序 web.xml 不起作用?
    • 是的,你必须在服务器级别进行
    • 不,您可以在应用程序 web.xml 中执行此操作,现在使用 Tomcat 7.0.47 进行了测试,请参阅我的答案中的编辑。
    • 真的,那么正在应用层创建一个新的 JspServlet 实例。谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多