0

我目前正在使用 java web 和 MVC 模式开发一个“玩具”项目。

我目前将 Hibernate 用于 DAO,将 ZK 用于用户界面,同时使用许多控制器类来实现应用程序逻辑。

现在我想添加另一个视图,一个使用 JAX-RS 的 RESTful 接口,我注意到我正在使用框架提供的类来获取 http 上下文。ZK 提供了 session 类:

import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.Session;
[...]
Session s = Sessions.getCurrent();
s.setAttribute("some_attr", some_object);

同时 JAX-RS (Apache wink) 提供了 Context 注释,您可以使用它来注释 HttpServletRequest 属性:

import javax.ws.rs.core.Context;
import javax.servlet.http.HttpServletRequest; ///< Interface
import javax.servlet.http.HttpSession; ///< Interface
[...]
@Context
HttpServletRequest context;
[...]
HttpSession s = context.getSession();
s.setAttribute("some_attr", some_object);

如何在不使用 ZK 或 JAX-RS 的情况下获取当前上下文,以便使控制器层独立于所使用的视图?

4

1 回答 1

0

javax.servlet.http.HttpSession是 Servlet API 的一部分,而不是 JAX-RS。因此,它是使用 HTTP 会话的最基本 API,据我了解,ZK 在底层使用 Servlet API。@Context 注释来自 Java EE,也是标准的。

使用第二种形式,它们是稳定和独立的!

如果您没有任何其他框架(如 spring,...),您可以编写一个 servlet 过滤器将会话复制到 aThreadLocal并在您的代码中检索它而不是注入它。

于 2013-11-08T19:27:13.587 回答