Java 小程序能否与servlet实例通信

Java 小程序能否与servlet实例通信,java,servlets,applet,Java,Servlets,Applet,我有一个小程序,它使用Http(而不是套接字)与servlet通信。当前,小程序的每个实例(即,当每个小程序由不同计算机上的不同客户端运行时),所有实例都与同一个servlet通信。我想要的是小程序的每个实例与同一servlet的不同实例进行通信。这可能吗?从您的问题来看,您的servlet似乎包含状态。每个小程序都有一个servlet容器,servlet可以访问该容器。您可以创建一个对象来保存每个会话的状态,并将该对象放置在调用方的会话中。通过这种方式,servlet容器可以在多个客户端之间自

我有一个小程序,它使用Http(而不是套接字)与servlet通信。当前,小程序的每个实例(即,当每个小程序由不同计算机上的不同客户端运行时),所有实例都与同一个servlet通信。我想要的是小程序的每个实例与同一servlet的不同实例进行通信。这可能吗?

从您的问题来看,您的servlet似乎包含状态。每个小程序都有一个servlet容器,servlet可以访问该容器。您可以创建一个对象来保存每个会话的状态,并将该对象放置在调用方的会话中。通过这种方式,servlet容器可以在多个客户端之间自由共享一个servlet实例。

从您的问题来看,您的servlet似乎包含状态。每个小程序都有一个servlet容器,servlet可以访问该容器。您可以创建一个对象来保存每个会话的状态,并将该对象放置在调用方的会话中。通过这种方式,servlet容器可以在多个客户端之间自由共享一个servlet实例。

处理实例特定操作的通常方式是将信息存储在servlet容器提供的会话范围中,而不是将信息存储在servlet本身中

要使其工作,小程序必须正确发送Cookie或web容器提供的JSESSIONID属性,或者小程序必须在servlet内请求特定于实例的URL

我建议您进一步熟悉ServletAPI规范,以便了解更多关于您可用的内容


还请注意,一些应用服务器支持“客户机”的概念,这些客户机是使用应用服务器提供的代码调用的程序,这些代码可以直接访问应用服务器代码的内部。实际的通信由application服务器提供的库处理,因此这很简单。Glassfish和Trifork可以做到这一点。

处理特定于实例的操作的通常方法是将信息存储在servlet容器提供的会话范围中,而不是将信息存储在servlet本身中

要使其工作,小程序必须正确发送Cookie或web容器提供的JSESSIONID属性,或者小程序必须在servlet内请求特定于实例的URL

我建议您进一步熟悉ServletAPI规范,以便了解更多关于您可用的内容


还请注意,一些应用服务器支持“客户机”的概念,这些客户机是使用应用服务器提供的代码调用的程序,这些代码可以直接访问应用服务器代码的内部。实际的通信由application服务器提供的库处理,因此这很简单。Glassfish和Trifork可以做到这一点。

您不希望在webapp的生命周期中拥有同一个servlet的不同实例。通常的做法是使用
HttpSession
来区分客户端。您需要将as参数传递给相关小程序:

<param name="jsessionid" value="${pageContext.session.id}">
这里的
servleturl
显然应该匹配
web.xml
中servlet的
url模式。您也可以使用
URLConnection.setRequestProperty()
设置
Cookie
请求头

最后,在Servlet中,要获取和存储特定于客户端的数据,请执行以下操作:

String jsessionid = getParameter("jsessionid");
URL servlet = new URL(getCodeBase(), "servleturl;jsessionid=" + jsessionid);
URLConnection connection = servlet.openConnection();
// ...
// Store:
request.getSession().setAttribute("data", data);
// Get:
Data data = (Data) request.getSession().getAttribute("data");

希望这有帮助。

您不希望在webapp的生命周期中有同一个servlet的不同实例。通常的做法是使用
HttpSession
来区分客户端。您需要将as参数传递给相关小程序:

<param name="jsessionid" value="${pageContext.session.id}">
这里的
servleturl
显然应该匹配
web.xml
中servlet的
url模式。您也可以使用
URLConnection.setRequestProperty()
设置
Cookie
请求头

最后,在Servlet中,要获取和存储特定于客户端的数据,请执行以下操作:

String jsessionid = getParameter("jsessionid");
URL servlet = new URL(getCodeBase(), "servleturl;jsessionid=" + jsessionid);
URLConnection connection = servlet.openConnection();
// ...
// Store:
request.getSession().setAttribute("data", data);
// Get:
Data data = (Data) request.getSession().getAttribute("data");

希望这能有所帮助。

servlet容器很可能会对所有请求使用相同的实例,或者如果不是,至少不会让它变得明显。是什么驱动了对不同实例的需求?我正在尝试实现一个聊天服务器。我有一个广播所有的代码,我想用它来广播只有两个客户端之间。因此,我的想法是创建一个包含广播所有代码的servlet的新实例,并要求两个小程序仅使用该实例来模拟“聊天”。这样,两个客户端组将使用相同的servlet实例。实际问题现在在这个链接上,以防任何人需要更好地理解这个问题。servlet容器很可能会对所有请求使用相同的实例,或者如果不使用,至少不会让它变得明显。是什么驱动了对不同实例的需求?我正在尝试实现一个聊天服务器。我有一个广播所有的代码,我想用它来广播只有两个客户端之间。因此,我的想法是创建一个包含广播所有代码的servlet的新实例,并要求两个小程序仅使用该实例来模拟“聊天”。这样,两个客户端组将使用相同的servlet实例。实际问题现在在这个链接上,以防任何人需要更好地理解这个问题。谢谢,您的回答与rsp的答案相似,但更详细。然而,这个问题是一个子问题:实际问题现在在这个链接上,以防任何人需要更好地理解这个问题。谢谢,您的回答与rsp的答案相似,但更详细。然而,这个问题是一个子问题:实际问题现在在这个链接上,以防任何人需要更好地理解这个问题。