совместное использование контекста сервлета между веб-приложениями на одном сервере - PullRequest
1 голос
/ 25 октября 2011

У меня есть два сервлета в отдельном веб-приложении, работающем в одном и том же контейнере (Tomcat).Пусть приложения будут app1 & app2, а servlets - serv1 & serv2.

Я использую serv1 (в app1) для вызова serv2 (в app2). Я также пытаюсь разделить один и тот же сеанс между этими двумя сервлетами.Ниже приведен фрагмент моего кода.

serv1 (app1) :

URLConnection connection = new URL("http://localhost:8080/app2/serv2").openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));  
HttpSession session = request.getSession(true);  
String sessionId = session.getId();  
ServletContext myContext = getServletContext();
myContext.setAttribute("MYSHAREDSESSIONID", sessionId);
myContext.setAttribute("SHAREDSESSION", session);

serv2 (app2) :

ServletContext callingContext = getServletContext().getContext("/app1");  
String jsessionId = (String)callingContext .getAttribute("MYSHAREDSESSIONID");

server.xml

<Host>
 <Context path="/app1" crossContext="true" />
 <Context path="/app2" crossContext="true" />
</Host>

Проблема в том, что я получаю исключение нулевого указателя в serv2 getAttribute().Основная причина в том, что getContext("/app1") возвращает null .Имена контекста верны.Я не знаю, почему я не могу получить контекст сервлета.Я не хочу использовать куки или переписывание URL.Пожалуйста, помогите.

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

Пока все выглядит отлично. Очевидно, он был переопределен context.xml, поддерживаемым / генерируемым в другом месте. Вы можете прочитать в Context справочнике по конфигурации Tomcat о правилах. Например, есть ли у вас веб-приложение в /META-INF? Затем вы должны определить crossContext там.

Или вы используете IDE, например Eclipse, для развертывания веб-приложений или что-то в этом роде? Затем необходимо настроить среду IDE так, чтобы она не развертывалась в метаданных рабочей области, а прямо в Tomcat, в противном случае Eclipse будет использовать свою собственную копию context.xml (которую вы можете найти в проекте Servers ). Вы можете настроить его в настройках сервера. Вот экран из Eclipse:

enter image description here

0 голосов
/ 26 октября 2011

Согласно J2EE, каждый контекст имеет свое собственное управление сессиями.Вы не можете совместно использовать сеанс в двух разных контекстах сервлета.Вам нужно будет передавать jessionid туда и обратно между контекстом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...