我在Tomcat的<Parameter name="javax.servlet.context.tempdir" value="${catalina.base}/my_temp" override="false"/>
文件的<Context>
节点内提供context.xml
。
我知道在服务器启动时会看到它因为此日志消息:
INFO: Creating LRUMap cache instance using parameters: {javax.servlet.context.tempdir=D:\{omitted}\tmp0\my_temp, org.richfaces.resourceMapping.enabled=true, javax.faces.PROJECT_STAGE=Development, javax.faces.SKIP_COMMENTS=true}
但是,当在RichFaces FileUploadFacesContextFactory.getTempFilesDirectory()
方法中单步执行代码时,调用servletContext.getAttribute("javax.servlet.context.tempdir")
(其中servletContext
是org.apache.catalina.core.ApplicationContextFacade
的实例)会给出值{{1 }}
我的印象(来自Tomcat Docs on context parameters)设置D:\{omitted}\tmp0\work\Catalina\localhost\_
应该让任何应用程序都不为此参数提供替代值。
这是预期的行为吗?我的配置错误?
答案 0 :(得分:1)
你误解了<Parameter>
的作用:它设置了一个ServletContext&#34; init-param&#34;与<context-param><param-name>javax.servlet.context.tempdir</param-name>...</context-param>
中的WEB-INF/web.xml
相同。
RichFaces正在查看正式的Context属性,这是不同的。如果您希望您的Web应用程序在启动时将init-param复制到context-attribute,那么您将要创建一个ServletContextListener
,在您的webapp启动时执行类似于以下内容的代码:
servletContext.setAttribute("javax.servlet.context.tempdir",
servletContext.getInitParam("javax.servlet.context.tempdir"));
请注意,更改tmpdir
的值可能不是一个好主意:它可能会影响容器管理资源的能力。