applet 可以与 servlet 实例通信吗

发布于 2024-08-27 16:04:43 字数 168 浏览 5 评论 0原文

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

I have an applet that communicates with a servlet using Http (Not sockets). Currently, each instance of the applet (i.e. when each applet is run by a different client on a different computer), all the instances communicate with the same servlet. What I want is that each instance of the applet communicate with different instances of the same servlet. Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

宣告ˉ结束 2024-09-03 16:04:43

您不希望在 web 应用程序的生命周期中拥有同一 servlet 的不同实例。正常的做法是使用HttpSession来区分客户端。您需要传递 HttpSession#getId() 作为相关小程序的参数:

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

然后,在小程序中按如下方式连接 Servlet:

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

这里 servleturl 显然应该匹配 web.xml 中 servlet 的 url-pattern。您也可以使用 URLConnection.setRequestProperty() 设置 Cookie 请求标头。

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

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

希望这会有所帮助。

You don't want to have different instances of the same servlet in webapp's lifetime. The normal practice is to use the HttpSession to distinguish between clients. You need to pass the HttpSession#getId() as parameter to the applet in question:

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

Then, in the Applet connect the Servlet as follows:

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

Here servleturl obviously should match servlet's url-pattern in web.xml. You can alternatively also set a Cookie request header using URLConnection.setRequestProperty().

Finally, in the Servlet, to get and store client specific data, do as follows:

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

Hope this helps.

○闲身 2024-09-03 16:04:43

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

From your question it seems that your servlet contains state. Every applet will have a session with the servlet container which your servlet can access. You can create an object that holds the state per session and place that object as attribute in the session of the caller. This way the servlet container is free to share one servlet instance among many clients.

妄断弥空 2024-09-03 16:04:43

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

为了使其正常工作,您的 applet 必须正确发送 Web 容器提供的 cookie 或 JSESSIONID 属性,或者 applet 必须请求 servlet 内的实例特定 URL。

我建议您进一步熟悉 Servlet API 规范,以便了解更多可用的内容。

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

The usual way to handle instance-specific actions is to have information stored in the session scope made available by the servlet container, not by having information stored in the servlet itself.

For it to work, your applet must correctly send cookies or the JSESSIONID attribute as provided by the web container or the applet must request a instance specific URL inside the servlet.

I would suggest you familiarize yourself further with the Servlet API specification in order to learn more about what is available to you.

Also note that some application servers support the notion of "clients" which are programs invoked with code served from the application server which have direct access to the inside of the application server code. The actual communication is handled by libraries also provided by the applcation server so this is simple. Glassfish and Trifork can do this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文