Может ли апплет обмениваться данными с экземпляром сервлета

У меня есть апплет, который связывается с сервлетом, используя Http (Not sockets). В настоящее время каждый экземпляр апплета (т.е. Когда каждый апплет запускается другим клиентом на другом компьютере), все экземпляры взаимодействуют с одним и тем же сервлетом. Я хочу, чтобы каждый экземпляр апплета связывался с разными экземплярами того же сервлета. Возможно ли это?

Ответы

Ответ 1

Вы не хотите иметь разные экземпляры одного и того же сервлета в жизни webapp. Обычная практика заключается в использовании HttpSession для различения между клиентами. Вам необходимо передать HttpSession#getId() в качестве параметра для рассматриваемого апплета:

<param name="jsessionid" value="${pageContext.session.id}">

Затем в апплете соедините сервлет следующим образом:

String jsessionid = getParameter("jsessionid");
URL servlet = new URL(getCodeBase(), "servleturl;jsessionid=" + jsessionid);
URLConnection connection = servlet.openConnection();
// ...

Здесь servleturl явно должен соответствовать сервлету url-pattern в web.xml. Вы также можете установить заголовок запроса Cookie, используя URLConnection.setRequestProperty().

Наконец, в сервлете, чтобы получить и хранить конкретные данные клиента, сделайте следующее:

// Store:
request.getSession().setAttribute("data", data);
// Get:
Data data = (Data) request.getSession().getAttribute("data");

Надеюсь, что это поможет.

Ответ 2

Из вашего вопроса кажется, что ваш сервлет содержит состояние. Каждый апплет будет session с контейнером сервлета, доступ к которому может получить ваш сервлет. Вы можете создать объект, который содержит состояние за сеанс, и поместить этот объект в attribute в сеансе вызывающего. Таким образом, контейнер сервлетов может совместно использовать один экземпляр сервлета среди многих клиентов.

Ответ 3

Обычный способ обработки специфичных для экземпляра действий заключается в том, чтобы информация, хранящаяся в области сеанса, предоставляемая контейнером сервлетов, а не путем хранения информации в самом сервлете.

Чтобы он работал, ваш апплет должен правильно отправлять файлы cookie или атрибут JSESSIONID, как это предусмотрено веб-контейнером, или апплет должен запрашивать конкретный URL-адрес экземпляра внутри сервлета.

Я бы посоветовал вам дополнительно ознакомиться с спецификацией API сервлета, чтобы узнать больше о том, что доступно для вас.

Также обратите внимание, что некоторые серверы приложений поддерживают понятие "клиенты", которые являются программами, вызываемыми кодом, обслуживаемым с сервера приложений, который имеет прямой доступ к внутренней части кода сервера приложений. Фактическое общение обрабатывается библиотеками, также предоставляемыми сервером applcation, поэтому это просто. Glassfish и Trifork могут это сделать.