在java中通过webservices维护多个会话请求

时间:2011-08-27 13:44:22

标签: java web-services session jax-rs

我想使用Java Web Services

实现以下解决方案(在图像中描述)

enter image description here 当用户使用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

1 个答案:

答案 0 :(得分: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