2

我是 Jersey / REST 新手,正在尝试编写一个简单的 Web 服务。我遇到的问题是请求之间的数据存储。

Servlet 可以访问会话,但我不相信 Jersey / REST 允许这样做。

我目前正在编写此服务,以便 Android 应用程序向 Tomcat 发出 RESTful 请求。

现在我还不确定这些请求的类型:它们应该是带有参数的 URL,还是只是一个 XML 字符串?从应用程序传输的数据类型将包括 RSS 提要和关键字的地址以及各种元数据。

来自服务器的 XML 响应将再次包含 RSS 提要地址、关键字、关键字的频率和其他元数据。

目前的想法是在应用程序和服务器上使用 JAXB 将 XML 组合和分解为 Java 对象。

JSON 或 GS​​ON 在这里不是可用的替代品。

但是在请求之间存储数据呢?如果 XML 形成请求和响应操作,那么将所有相关变量存储在 XML 中是否足够,其中每个请求都有一个引用服务器数据库的 ID 号。

还是通过 REST 为 servlet 使用会话上下文更好?

如果以上听起来含糊不清,我们深表歉意。我是泽西岛/REST 新手。

4

3 回答 3

5

虽然如前所述,通常建议您的 WS 调用是无状态的,但 Jersey 确实依赖于 Servlet,因此您可以注入 HttpServletRequest 并从那里获取会话:

@GET
public String getMethod(@Context HttpServletRequest req) {
    HttpSession session= req.getSession(true);
    ...

然后,您可以将 Web 服务器会话存储配置为内存、cookie、缓存、数据库或其他任何内容。

于 2013-06-20T18:51:54.220 回答
1

REST Web 服务基于 HTTP 协议,它是一种无状态协议。在我看来,在你的 web 服务中保存状态不是一个好主意。您应该使用 cookie 来存储用户数据。

于 2013-06-20T13:57:14.007 回答
0

JAX-RS 服务可以是单例或按请求对象。单例意味着只有一个 Java 对象服务于 HTTP 请求。每个请求意味着创建一个 Java 对象来处理每个传入的请求,并在该请求结束时被丢弃。每个请求也意味着无状态,因为请求之间没有服务状态。

于 2013-06-20T22:10:46.927 回答