0

我在Tomcat文件的节点<Parameter name="javax.servlet.context.tempdir" value="${catalina.base}/my_temp" override="false"/>内部提供了一个。<Context>context.xml

由于此日志消息,我知道在服务器启动时可以看到它:

信息:使用参数创建 LRUMap 缓存实例:{javax.servlet.context.tempdir=D:\{omitted}\tmp0\my_temp, org.richfaces.resourceMapping.enabled=true, javax.faces.PROJECT_STAGE=Development, javax.faces .SKIP_COMMENTS=true}

FileUploadFacesContextFactory.getTempFilesDirectory()但是,当在 RichFaces方法中单步执行代码时,对servletContext.getAttribute("javax.servlet.context.tempdir")(其中servletContext是 的实例org.apache.catalina.core.ApplicationContextFacade)的调用会给出值D:\{omitted}\tmp0\work\Catalina\localhost\_

我的印象是(来自Tomcat Docs on context parameters)设置override="false"应该阻止任何应用程序为此参数提供替代值。

这是预期的行为吗?我的配置错误?

4

1 回答 1

1

你误解了什么<Parameter>:它设置了一个 ServletContext“init-param”,就像<context-param><param-name>javax.servlet.context.tempdir</param-name>...</context-param>在你的WEB-INF/web.xml.

RichFaces 正在查看一个正式的 Context 属性,这是不同的。如果您希望您的 web 应用程序在启动时将 init-param 复制到上下文属性,您将需要创建一个ServletContextListener在您的 web 应用程序启动时执行类似于以下代码的代码:

servletContext.setAttribute("javax.servlet.context.tempdir",
                            servletContext.getInitParam("javax.servlet.context.tempdir"));

请注意,更改 的值tmpdir可能不是一个好主意:它可能会干扰容器管理资源的能力。

于 2012-07-26T18:14:00.860 回答