Tomcat 7へのアップグレード以降、webappに問題があります。ログインして何かを実行しようとすると(リクエストを送信して)、セッションはnull
になります。次の設定が役立つ場合があることを読みました。
org.Apache.Tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false
誰がこれを設定する場所を知っていますか?これは、web.xml
、context.xml
、または他の場所で設定する必要がありますか?
もう1つ確認したいのは、次のことです。
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 bin
フォルダーに次の内容のファイルsetenv.bat
(Linuxの場合はsetenv.sh
)を含めることができます。
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 Path値は引用符で囲まれて送信され(例:"\"
)、Operaを除く今日のすべてのブラウザーはこれを認識せず、たとえばセッションを追跡できません。
ソリューション:
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で他の誰かがこの設定を処理する必要がありましたか?または、同様の問題がありますか?
Eclipseで実行されているサーバーの変数を設定しようとしている場合: