自从升级到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
答案 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中运行的服务器设置变量: