Tomcat 7 - 我在哪里设置'系统属性'?

时间:2012-03-01 17:28:45

标签: apache session tomcat tomcat7

自从升级到Tomcat 7后,我的webapp出现问题。我登录后尝试做任何事情(提交请求),我的会话将转到null。我已经读过,设置以下内容可能有所帮助:

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

有谁知道在哪里设置这个?是应该在web.xmlcontext.xml还是其他地方设置?

我想检查的另一件事是:

org.apache.catalina.STRICT_SERVLET_COMPLIANCE

5 个答案:

答案 0 :(得分:35)

您可以在

中设置任何系统属性
apache-tomcat-7.0.33\conf\catalina.properties

文件。在此文件中添加条目可以解决您的问题。

E.g。

environment=local

答案 1 :(得分:12)

您可以通过在/ bin目录中创建setenv.sh文件来在Tomcat中设置系统属性。 我做了以下设置系统属性。

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

记住:

export JAVA_OPTS=之间没有空格。另外:符号&不同,请使用.

现在,运行catalina.sh启动tomcat。

答案 2 :(得分:5)

您可以在启动Tomcat的命令行中设置这些系统属性。例如,您可以在Tomcats setenv.bat文件夹中包含文件setenv.sh(在bin上,如果您在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_COMPLIANCE设置为true时,这也是我建议的,以便始终禁用FWD_SLASH_IS_SEPARATOR。否则,cookie路径值将被引用(例如"\"),并且除了Opera之外的所有浏览器都不会识别这个并且例如无法跟踪会话。

答案 3 :(得分:3)

解决方案:

sessionCookiePathUsesTrailingSlash="false"

我们实际上已经找到了解决这个问题的方法。这是我们需要设置的Tomcat 7设置。我们将其放在server.xml下,标记如下:

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

当我们调试问题并查看Cookie路径时,我们注意到它在webapp名称后放了\反斜杠,因此对于我们的测试webapp,它将路径设置为/test/而不是/test。这引起了一系列问题。

有没有其他人必须在Tomcat 7中处理此设置?或者有类似的问题?

答案 4 :(得分:1)

如果您正在尝试为在eclipse中运行的服务器设置变量:

  1. 选择运行&gt;运行配置
  2. 确保选择了您的服务器
  3. 选择环境标签
  4. 点击&#39;新&#39;添加新变量