2012-03-01 92 views
22

我的web應用程序在升級到Tomcat 7後出現問題。我登錄並嘗試執行任何操作(提交請求)後,會話將會變爲null。我讀過設置以下可能會有所幫助:Tomcat 7 - 我在哪裏設置'系統屬性'?

org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false 

有誰知道在哪裏設置?是否應該在web.xmlcontext.xml或其他地方設置?

我要檢查的另一件事是:

org.apache.catalina.STRICT_SERVLET_COMPLIANCE 
+0

我閱讀以下內容,http://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html,我沒有請參閱有關設置此位置的任何信息。我只需要知道如何正確設置FWD_SLASH_IS_SEPARATOR爲false。 – LuckY07 2012-03-01 20:48:43

+0

另外,我們在Windows環境中運行。 – LuckY07 2012-03-01 21:05:30

+0

@Michael - 在RUNNING.txt中的哪裏顯示在哪裏設置FWD_SLASH_IS_SEPARATOR?你是指如何向你展示如何設置變量(在Windows中)爲setenv.bat? – LuckY07 2012-03-02 15:21:02

回答

3

解決方案:

sessionCookiePathUsesTrailingSlash="false" 

實際上,我們找到了如何解決這個問題。這是我們需要設置的Tomcat 7設置。我們把它放在server.xml,標籤下,如下所示:

<Context path="/test" reloadable="true" docBase="c:\webapp\test" 
workDir="c:\webapp\test" sessionCookiePathUsesTrailingSlash="false"/> 

當我們調試問題,看着餅乾路徑,我們發現它是把一個\反斜槓web應用程序名後,所以我們的測試web應用它將路徑設置爲/test/而不是/test。這造成了一堆問題。

有沒有其他人不得不在Tomcat 7中處理這個設置?或者有類似的問題?

3

您可以在啓動Tomcat的命令行中設置這些系統屬性。例如,你可以在雄貓bin文件夾文件setenv.bat(上setenv.sh如果你是在Linux上)具有以下內容:

set "CATALINA_OPTS=%CATALINA_OPTS% -Dfile.encoding=UTF8 -Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=true -Duser.timezone=GMT -Xmx1024m -XX:MaxPermSize=256m" 

該文件是爲Tomcat設置屬性的首選方式。

現在,FWD_SLASH_IS_SEPARATOR默認設置爲false。如果您將STRICT_SERVLET_COMPLIANCE設置爲true,那麼FWD_SLASH_IS_SEPARATOR的值也將設置爲true(以及其他一些屬性的值)。但是,您可以明確地將其設置爲false,例如,使用您的setenv文件,以下是罰款:

-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=true 
-Dorg.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false 

這也是我建議,當有人將STRICT_SERVLET_COMPLIANCEtrue,始終禁用FWD_SLASH_IS_SEPARATOR。否則,Cookie路徑值將被引用(例如"\"),並且截至今日的所有瀏覽器(除Opera之外)都不會識別這種情況,並將例如無法跟蹤會話。

25

您可以設置任何系統屬性的

apache-tomcat-7.0.33\conf\catalina.properties 

文件。在這個文件中添加條目應該可以解決你的問題。

例如,

environment=local 
10

通過在/ bin目錄中創建setenv.sh文件,可以在Tom cat中設置系統屬性。 我已經做了以下設置系統屬性。

export JAVA_OPTS="-Dmyprojectvar.subname=value -Danothervariable=value -Danother.variable=value" 

記住:

還有就是export JAVA_OPTS=和符號&之間沒有空格不同的是,使用.

現在運行你的catalina.sh來啓動tomcat。

+2

不幸的是,您無法將這些密碼值(例如信任庫密碼)設置爲可以登錄並運行「ps」或讀取/ proc/*/cmdline的任何人,而無法將其泄露給任何人。在catalina.properties中定義它們可以避免這種泄漏。這是使用自定義系統屬性來配置servlet代碼是_bad idea_的一個原因。改爲使用上下文參數。 – 2015-06-17 20:25:43

+1

除了@MarkWood提出的警告外,這種技術只有在使用啓動腳本啓動Tomcat時纔有效。如果您使用其他工具啓動Tomcat(例如,作爲Microsoft Windows「服務」),則會忽略諸如「bin/setenv.sh | bat」之類的腳本。使用'catalina.properties'確保設置系統屬性,而不管Tomcat啓動的方式如何。 – 2016-09-14 22:09:40

1

如果你想設置的變量在Eclipse中運行的服務器:

  1. 選擇運行>運行配置
  2. 確保你的服務器選擇
  3. 選擇環境選項卡
  4. 點擊「新建'添加一個新變量
相關問題