使用两个不同的Java Web框架时访问http会话

时间:2013-11-08 18:53:36

标签: java servlets jax-rs zk

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

我目前正在使用Hibernate for DAO和ZK作为用户界面,同时使用许多控制器类来实现应用程序逻辑。

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

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的情况下获取当前上下文,以便我可以使控制器层独立于所使用的视图?

1 个答案:

答案 0 :(得分:0)

javax.servlet.http.HttpSession是Servlet API的一部分,而不是JAX-RS。所以它是使用HTTP Sessions的最基本的API,因为我理解ZK它使用了Servlet API。 @Context注释从Java EE开始,也是标准的。

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

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