2012-03-01 124 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. 点击“新建'添加一个新变量
相关问题