【问题标题】:maintain multiple session request over webservices in java在 java 中通过 web 服务维护多个会话请求
【发布时间】:2011-11-05 02:35:51
【问题描述】:

我想使用 Java Web 服务实现以下解决方案(在图像中描述)

当用户使用 Web 服务请求具有有效凭据的用户时,会在服务器上创建一个会话,并且该服务器(接收请求的服务器)会创建与其他服务器(即 Meta Trader 的服务器)的连接。

这里每个用户都有一个不同的会话来维持他们与元交易服务器的连接和状态。

注意: 目前,当用户请求时,我没有维护任何会话,而是将连接对象保存在

  @javax.ws.rs.core.Context
  ServletContext servletContext;

  MyApplication application = new MyApplication();
  servletContext.setAttribute("application", application);

但是这个解决方案并不能自然地为多个用户提供服务。所以请任何人知道如何解决为多个客户提供服务的问题,然后请回复。

我正在使用 Glassfish 和 JAX-RS (Jersery 1.1),JAXB

【问题讨论】:

  • 只是评论,我永远不会将会话与 Web 服务(RS、WS-*)结合使用。它不会扩展并且在操作中很痛苦。
  • @home 那么另一种选择是什么,我将如何通过 Web 服务公开数据。您可以看到 Betfair API 的 Web 服务与用户会话一起公开
  • 我的评论只是基于个人经验。如果那里的 API 使用服务器端会话状态,它似乎对它们有用。一般来说,我更喜欢维护客户端上的状态,因此在每次调用时重新提交它(假设该状态是必需的)。
  • @home,在用户端我已经实现了丰富的用户界面,那么我将如何维护客户端的状态?
  • 你可以在 JS 变量中维护它——尽管如此,如果用户重新加载整个页面(例如按 F5),这可能不起作用...

标签: java web-services session jax-rs


【解决方案1】:

只需使用注解 @javax.ws.rs.core.Context 来获取 HttpServletRequest 并在部署 Jersey 的容器中使用其会话。

下面的代码是一个简单的球衣资源示例,它获取会话对象并将值存储在会话中并在后续调用中检索它们。

@Path("/helloworld")
public class HelloWorld {

    @GET
    @Produces("text/plain")
    public String hello(@Context HttpServletRequest req) {

        HttpSession session= req.getSession(true);
        Object foo = session.getAttribute("foo");
        if (foo!=null) {
            System.out.println(foo.toString());
        } else {
            foo = "bar";
            session.setAttribute("foo", "bar");
        }
        return foo.toString();


    }
}

但你应该使用这样的 RESTful API。它意味着用作无状态的 Web 服务,而不是 Web 应用程序。检查以下我从中获得示例和建议的答案

(球衣安全和会话管理)
https://stackoverflow.com/a/922058
https://stackoverflow.com/a/7752250

(如何在 JAX-RS 中管理状态?)
https://stackoverflow.com/a/36713305

(在 JAX-RS 资源中获取 ServletContext)
https://stackoverflow.com/a/1814788

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2013-04-20
    • 1970-01-01
    • 2018-09-05
    • 2013-12-17
    • 2013-11-25
    相关资源
    最近更新 更多