Я удалил свой прецедентный пост, чтобы воссоздать более четкое. Для информации я упростил код, чтобы сделать его проще.
Представляю вам свою проблему.
Мой сервлет HelloWorld:
public class HelloWorld extends HttpServlet {
private String message;
public void init() throws ServletException {
// Do required initialization
message = "Hello World";
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
// session test
System.out.println( request.getSession().getId() );
PrintWriter out = response.getWriter();
out.println("<html><head><script src='./dwr/engine.js'></script><script src='./dwr/util.js'></script></head><body><h1>Hello World</h1></body></html>");
}
public void destroy() {
// do nothing.
}
}
Сервлет отображает html-страницу с сообщением HellWorld и включает файлы javascript DWR (Direct Web Remoting). Файлы javascript DWR извлекаются из сервлета /dwr/.
Web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>TestDWR2</display-name>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>test.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>WEB-INF/dwr.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>Extranet resource</web-resource-name>
<description>Extranet resources</description>
<url-pattern>/HelloWorld/*</url-pattern>
<url-pattern>/dwr/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>intranet_admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Extranet</realm-name>
</login-config>
<security-role>
<description>Intranet Admin</description>
<role-name>intranet_admin</role-name>
</security-role>
</web-app>
Сервлеты /HelloWorld и /dwr защищены. Логин основан на базе данных пользователей tomcat:
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<user username="tomcat" password="tomcat" roles="intranet_admin"/>
</tomcat-users>
HTTP-запрос/ответ:
Для вызова сервлета HelloWorld
Для вызова сервлета DWR (engine.js)
Для вызова сервлета DWR (util.js)
Для вызова сервлета DWR (_System.pageLoaded.dwr)
Как видите, JSESSIONID меняется для каждого запроса, и это моя проблема, которую я не могу решить в течение некоторого времени...
Я все еще прогрессирую последние несколько дней. Теперь я знаю, что проблема возникает только тогда, когда сервлеты защищены:
<web-resource-collection>
<web-resource-name>Extranet resource</web-resource-name>
<description>Extranet resources</description>
<url-pattern>/HelloWorld/*</url-pattern>
<url-pattern>/dwr/*</url-pattern>
</web-resource-collection>
Если удалить эту безопасность, каждый запрос возвращает один и тот же JSESSIONID. Почему? Я сказал, что это не связано с DWR. Когда я вызываю сервлет для возврата другого JS, такого как jQuery, я сталкиваюсь с той же проблемой.
Можешь мне помочь?
Вы можете найти по этой ссылке войну для развертывания на tomcat (Tomcat 7), чтобы обнаружить проблему:
Вы можете найти по этой ссылке источник кода:
Большое Вам спасибо.