我目前正在使用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的情况下获取当前上下文,以便我可以使控制器层独立于所使用的视图?
答案 0 :(得分:0)
javax.servlet.http.HttpSession
是Servlet API的一部分,而不是JAX-RS。所以它是使用HTTP Sessions的最基本的API,因为我理解ZK它使用了Servlet API。 @Context注释从Java EE开始,也是标准的。
使用第二种形式,它们是稳定且独立的!
如果你没有任何其他框架(比如spring,...),你可以编写一个servlet过滤器,将会话复制到ThreadLocal
并在你的代码中检索它而不是注入它。