2012-07-25 47 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