以下の SO 投稿に基づいて、(同じ Tomcat インスタンス上の) 2 つのアプリケーション コンテキスト間でセッションを共有しようとしています。
Tomcat のコンテキスト間でセッション データを共有する
これをテストするために、次のような 2 つの Web アプリケーションを作成しました。(各 webapp には、サーブレットと web.xml のみが含まれます)
WebApp-1 サーブレット
public class App1Servlet extends HttpServlet
{
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response){
HttpSession session = request.getSession(true);
session.setAttribute("message", "hello");
try{
response.getOutputStream().print("session value set");
}catch(Exception e){}
}
}
Webapp-1 web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>app1</display-name>
<servlet>
<servlet-name>app1servlet</servlet-name>
<servlet-class>session.test.App1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>app1servlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<session-config>
<cookie-config>
<name>APPSESSIONID</name>
<path>/</path>
</cookie-config>
</session-config>
</web-app>
WebApp-2 サーブレット
public class App2Servlet extends HttpServlet
{
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response){
HttpSession session = request.getSession(false);
try{
if(session != null){
response.getOutputStream().print(""+session.getAttribute("message"));
} else {
response.getOutputStream().print("session is null");
}
}catch(Exception e){}
}
}
Webapp-2 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>app2</display-name>
<servlet>
<servlet-name>app2servlet</servlet-name>
<servlet-class>session.test.App2Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>app2servlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<session-config>
<cookie-config>
<name>APPSESSIONID</name>
<path>/</path>
</cookie-config>
</session-config>
</web-app>
次の http リクエストを次々に発行すると、2 番目のリクエストは「hello」を出力する必要がありますが、2 番目のリクエストは常に「session is null」を出力します。
http://localhost/app1
http://localhost/app2
誰かがここで何が間違っているか指摘できますか? (私の web.xml はバージョン 3.0 です)
私はソーシャルネットワーキングのような webapp を開発しています。UI 部分を 1 つの webapp として作成し、バックエンドを安らかなサービス webapp として作成し、両方の webapp を同じ tomcat インスタンスにデプロイすることを計画しています。これが正しいアプローチであると誰かが提案できますか?