2012-07-25 77 views
0

我在Tomcat的context.xml文件的<Context>节点内提供<Parameter name="javax.servlet.context.tempdir" value="${catalina.base}/my_temp" override="false"/>Tomcat 7设置的javax.servlet.context.tempdir的值不受RichFaces 4.2.2Final

我知道这是被人看见在服务器启动时,因为此日志消息:

 
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")通话(其中servletContextorg.apache.catalina.core.ApplicationContextFacade实例时)给出值D:\{omitted}\tmp0\work\Catalina\localhost\_

我在印象中(从Tomcat Docs on context parameters)设置override="false"应该让任何应用程序不能为此参数提供替代值。

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

回答

1

您误解了<Parameter>的做法:它会像<context-param><param-name>javax.servlet.context.tempdir</param-name>...</context-param>在您的WEB-INF/web.xml中那样设置ServletContext“init-param”。

RichFaces正在查看一个正式的Context属性,这是不同的。如果你想你的web应用到一个init-PARAM复制到启动时的上下文属性,你要创建一个ServletContextListener执行类似于下面的代码你的web应用启动时:

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

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

+0

我一直对修改价值的想法感到不舒服,但感到我被迫(因为在我的一个早期试验期间该目录不存在)。我现在知道我有其他选择。感谢您澄清''节点的意图,克里斯托弗。 – 2012-07-31 14:53:30