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

Apache Tomcat 7-在哪里设置';系统属性';?,apache,session,tomcat,tomcat7,Apache,Session,Tomcat,Tomcat7,升级到Tomcat 7后,我的webapp出现问题。登录并尝试执行任何操作(提交请求)后,我的会话将变为null。我已经了解到,设置以下选项可能会有所帮助: org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false 有人知道把这个放在哪里吗?这应该在web.xml、context.xml或其他地方设置吗 我想检查的另一件事是: org.apache.catalina.STRICT_SERVLET_COMPLIAN

升级到Tomcat 7后,我的webapp出现问题。登录并尝试执行任何操作(提交请求)后,我的会话将变为
null
。我已经了解到,设置以下选项可能会有所帮助:

org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false
有人知道把这个放在哪里吗?这应该在
web.xml
context.xml
或其他地方设置吗

我想检查的另一件事是:

org.apache.catalina.STRICT_SERVLET_COMPLIANCE

解决方案:

sessionCookiePathUsesTrailingSlash="false"
我们实际上已经找到了解决这个问题的方法。这是我们需要设置的Tomcat7设置。我们将其放置在
server.xml
中的标签下,如下所示:

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

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


在Tomcat7中是否有其他人必须处理此设置?或者有类似的问题?

您可以在启动Tomcat的命令行中设置这些系统属性。例如,您可以将文件
setenv.bat
(如果您在linux上,则在
setenv.sh
上)放在Tomcats
bin
文件夹中,其中包含以下内容:

set "CATALINA_OPTS=%CATALINA_OPTS% -Dfile.encoding=UTF8 -Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=true -Duser.timezone=GMT -Xmx1024m -XX:MaxPermSize=256m"
此文件是设置Tomcat属性的首选方法

现在,
FWD\u SLASH\u是分隔符
默认设置为
false
。如果将
STRICT\u SERVLET\u COMPLIANCE
设置为
true
,则
FWD\u SLASH\u的值也将设置为
true
(以及一些其他属性的值)。但是,您可以将其显式设置为
false
,例如,在
setenv
文件中使用以下选项即可:

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

当有人将
STRICT\u SERVLET\u COMPLIANCE
设置为
true
时,我也建议您始终禁用
FWD\u SLASH\u is\u分隔符
。否则,cookie路径值将被引用发送(例如,
“\”
),并且除Opera外,今天的所有浏览器都无法识别该值,例如无法跟踪会话。

您可以在中设置任何系统属性

apache-tomcat-7.0.33\conf\catalina.properties
文件。在该文件中添加条目应该可以解决您的问题。

例如


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

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

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


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

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

  • 选择运行>运行配置
  • 确保选择了您的服务器
  • 选择“环境”选项卡
  • 单击“新建”添加新变量

  • 我读了以下内容,但没有看到任何关于在何处设置此项的信息。我只需要知道如何正确地将FWD_斜杠_IS_SEPARATOR设置为false。此外,我们正在windows环境中运行。@Michael-running.txt中的何处显示设置FWD_斜杠_IS_SEPARATOR的位置?您指的是如何将变量(在windows中)设置为setenv.bat吗?我们是在SERVER.XML而不是setenv.bat中进行更改的,这是一种比另一种更受欢迎的方式吗?谢谢。@Michael-O没有回答您正在玩的问题。不幸的是,如果不向任何可以登录并运行“ps”或read/proc/*/cmdline的人透露秘密值(例如信任库密码),您就无法以这种方式设置秘密值。在catalina.properties中定义它们可以避免这种泄漏。这就是为什么使用自定义系统属性来配置servlet代码是个坏主意的原因之一。使用上下文参数。除了@MarkWood提出的警告外,这种技术只有在使用启动脚本启动Tomcat时才有效。如果使用其他工具启动Tomcat(例如作为Microsoft Windows“服务”),则会忽略
    bin/setenv.sh | bat
    等脚本。使用
    catalina.properties
    可确保系统属性的设置与Tomcat的启动方式无关。不要使用JAVA\u选项,而是创建一个新的系统属性,然后将其包括在内,这样就不会弄乱系统现有的属性-ex i以这种方式配置日志路径-导出“log\u CONFIG=-DMY\u log=root/users/myUser/data/logs”这救了我的命:-)
    export JAVA_OPTS="-Dmyprojectvar.subname=value -Danothervariable=value -Danother.variable=value"