有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

现在我想添加另一个视图,一个使用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)提供了上下文注释,您可以用它来注释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) 个答案

  1. # 1 楼答案

    javax.servlet.http.HttpSession是Servlet API的一部分,而不是JAX-RS。因此,它是使用HTTP会话的最基本API,据我所知,ZK在幕后使用Servlet API。@Context注释来自javaee,也是标准的

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

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