我有一个使用Http(不是套接字)与servlet通信的小程序。目前,小应用程序的每个实例(即,当每个小应用程序由不同计算机上的不同客户端运行时),所有实例都与相同的小服务程序通信。我想要的是,小程序的每个实例都与相同的servlet的不同实例进行通信。这可能吗?小应用程序能否与servlet的实例进行通信
回答
您不希望在webapp的一生中使用相同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
显然应该与servlet的url-pattern
在web.xml
。您也可以使用URLConnection.setRequestProperty()
来设置Cookie
请求标头。
最后,在Servlet中,获得和存储客户端专用数据,请执行以下操作:
// Store:
request.getSession().setAttribute("data", data);
// Get:
Data data = (Data) request.getSession().getAttribute("data");
希望这有助于。
谢谢,你的答案类似于rsp,但更详细。然而,这个问题是一个子问题:现在的问题是现在在这个环节,以防有人需要更好地理解问题。 http://stackoverflow.com/questions/2567377/how-to-initiate-chatting-between-two-clients-and-two-clients-only-using-applets – mithun1538 2010-04-02 15:14:34
通常的方式来处理实例的具体行动就是有,不是由具有存储在servlet本身的信息存储在由servlet容器提供会话范围的信息。
对于它的工作,你的applet必须正确发送,由Web容器内提供或者小程序必须要求在servlet内部的实例特定URL饼干或JSESSIONID属性。
我建议你用Servlet API的规范进一步了解,以了解更多关于什么是提供给您。
另外请注意,某些应用服务器支持的“客户”,这是具有应用服务器代码内直接访问与应用服务器提供的代码中调用程序的概念。实际的通信是由applcation服务器提供的库处理的,所以这很简单。 Glassfish和Trifork可以做到这一点。
- 1. WPF +在多个应用程序实例之间进行通信
- 2. 使用OpenThread堆栈进行通信的示例应用程序
- 3. 通过Wifi将Android应用程序与PC应用程序进行通信
- 4. 应用程序的两个实例如何在Java中进行通信?
- 5. 通过C#应用程序与Web进行通信?
- 6. 用于与arduino进行蓝牙通信的Android应用程序
- 7. 在WinForms应用程序运行时与其进行通信
- 8. Java小程序与Rails应用程序的通信
- 9. 获取iPhone应用程序与Adobe Air桌面应用程序进行通信
- 10. 通过串行端口进行通信的Web应用程序
- 11. Android:如何与Windows桌面应用程序进行通信?
- 12. WinForm应用程序与ASP.NET Mvc或WebService进行通信
- 13. 控制台应用程序与Windows服务进行通信
- 14. 获取网页与C++应用程序进行通信
- 15. 如何从.Net Web应用程序与Outlook进行通信
- 16. 通过RPC从Java应用程序与Windows进程通信
- 17. 黑莓小程序与后台服务器进行通信
- 18. 是否有可能与Java或Python中的应用程序与WCF TCP服务进行通信?
- 19. 在PC上与Java程序进行通信的Android应用程序
- 20. 是否可以通过subprocess.Popen与子子进程进行通信?
- 21. 获取GWT应用程序与本地客户端进程进行通信
- 22. winforms应用程序多个实例之间的通信
- 23. 使用应用程序的多个实例的性能改进
- 24. 我的进程的并行实例数(应用程序)
- 25. 使用JCIFS与远程Windows实例进行通信时获取nca_proto_error/DCERPC_FAULT_PROTO_ERROR
- 26. 非应用程序与NFC的通信
- 27. 64位应用程序与32位进程通信
- 28. 大多数iPhone应用程序是否通过网络服务进行通信?
- 29. android服务与其他类实例进行通信
- 30. 如何从私有云与AWS EC2实例进行通信?
servlet容器很可能会对所有请求使用相同的实例,或者至少在不显示的情况下最不明显。什么在推动对不同实例的需求? – 2010-04-02 12:09:40
我正在尝试实现聊天服务器。我有一个广播所有代码,我想用它来在两个客户端之间进行广播。因此,我在想的是我创建了一个包含广播所有代码的servlet的新实例,并要求两个applet只使用该实例来模拟“聊天”。这样,2个客户端组将使用同一个servlet实例。 – mithun1538 2010-04-02 12:28:56
真正的问题是现在在这个环节,以防有人需要更好地理解问题。 http://stackoverflow.com/questions/2567377/how-to-initiate-chatting-between-two-clients-and-two-clients-only-using-applets – mithun1538 2010-04-02 15:15:06