初めてセッションにアクセスするときにセッションを作成して情報を保存するサーブレットベースのアプリケーションがあります。この情報は後続のページで使用されます。 msword文書の内部から最初のURLをクリックすると、処理が失敗します。サーブレットはセッションを作成し、応答を返します。応答は新しく開かれたブラウザに表示されます。ブラウザの内側からクリックすると、新しいセッションが作成されます。ブラウザーからクリックされた後続のURLはすべて第2セッションを再利用しますブラウザのリンクがクリックされたときに、word文書のurlで作成されたhttpセッションをどのようにして取得するのですか?
第2の要求でサーバが最初のセッションを認識するように強制する方法はありますか?
私は、セッションを取得し、そのIDを新しいリンクと共に書き込んで、それ自身をコールバックするサンプルサーブレットを作成しました。以下は
テスト・サーブレット
public class SessionServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
StringBuffer sb = new StringBuffer();
sb.append("<HTML>\r\n<HEAD>\r\n<title>\r\nServlet Session Test\r\n</title>\r\n");
sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
sb.append("</HEAD>\r\n<BODY>\r\n");
HttpSession userSession = request.getSession(true);
if (userSession.isNew()) {
sb.append("User Session is new\r\n");
} else {
sb.append("User Session is old\r\n");
}
sb.append("<br>User Session ID = " + userSession.getId() + "<BR>");
sb.append("URL <a href=\"http://localhost:9080/myTestApp/SessionTest\"> Session Test </a>");
sb.append("</BODY> </HTML>\r\n");
response.setContentType("text/html; charset=UTF-8");
ServletOutputStream sos = response.getOutputStream();
sos.write(sb.toString().getBytes("UTF-8"));
}
}
他のアプリケーションでリンクをクリックしたときの動作が異なります。たとえば、Acrobat Readerリンクは、ブラウザが後続のページで引き続き使用するセッションを1つだけ作成します。 – GregA100k