自从升级到 Tomcat 7 以来,我的 Web 应用程序出现了问题。在我登录并尝试执行任何操作(提交请求)后,我的会话将继续
null
。我读到设置以下内容可能会有所帮助:
org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false
有人知道在哪里设置吗?应该设置在
web.xml
、context.xml
还是其他地方?
我想检查的另一件事如下:
org.apache.catalina.STRICT_SERVLET_COMPLIANCE
您可以在
中设置任何系统属性apache-tomcat-7.0.33\conf\catalina.properties
文件。在此文件中添加您的条目应该可以解决您的问题。
例如
environment=local
您可以通过在 /bin 目录中创建
setenv.sh
文件来设置 Tomcat 中的系统属性。
我执行了以下操作来设置系统属性。
export JAVA_OPTS="-Dmyprojectvar.subname=value -Danothervariable=value -Danother.variable=value"
记住:
export JAVA_OPTS
和=
之间没有空格。另外:符号&
不同,请使用.
。
现在,运行
catalina.sh
来启动 tomcat。
您可以在启动 Tomcat 的命令行中设置这些系统属性。例如,您可以在 Tomcats
setenv.bat
文件夹中包含文件 setenv.sh
(如果您使用的是 Linux,则在 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_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 之外的所有浏览器都无法识别这一点,并且会例如无法跟踪会话。
解决方案:
sessionCookiePathUsesTrailingSlash="false"
我们实际上已经找到了解决这个问题的方法。这是我们需要设置的 Tomcat 7 设置。我们把它放在
server.xml
,标签下,如下:
<Context path="/test" reloadable="true" docBase="c:\webapp\test"
workDir="c:\webapp\test" sessionCookiePathUsesTrailingSlash="false"/>
当我们调试问题并查看 cookies 路径时,我们注意到它在 web 应用程序名称后面添加了
\
反斜杠,因此对于我们的测试 web 应用程序,它将路径设置为 /test/
而不是 /test
。这导致了一系列问题。
还有其他人必须在 Tomcat 7 中处理此设置吗?或者有类似的问题?
如果您尝试为 Eclipse 中运行的服务器设置变量:
当使用 Apache Commons Daemon Service Runner (
Tomcat.exe
) 在 Windows 上运行 Tomcat 时,setenv.bat
会被忽略(请参阅 RUNNING.txt
第 3.4 节)。
您可以使用 Tomcat Properties 程序设置系统属性。
Tomcatw.exe
-D{key}={value}
将系统属性键值对插入到Java Options
如果您不想使用 GUI,此文本将保留在注册表项
Options
的 HKLM\SOFTWARE\WOW6432Node\Apache Software Foundation\Procrun 2.0\Tomcat\Parameters\Java
值中(在 x64 Windows 上)。