我正在尝试找出与纯EJB Web服务结合使用httpsession的最佳方法。我创建了一个实用程序类,我有一个控制器类。在控制器类中实例化实用程序类的最佳位置在哪里?计划是访问/调用网络服务的每个用户,即第一次使用网站,应该分配一个httpsession对象:
public class Utility {
@Resource
private WebServiceContext wsContext;
public MessageContext mc = wsContext.getMessageContext();
public HttpSession getSession(){
return ((HttpServletRequest)mc.get(MessageContext.SERVLET_CONTEXT)).getSession(true);
}
}
@Path("controller")
@Stateless
public class ControllerEJB {
@POST
public void registerUser(
@QueryParam("fornamn") String fornamn,
@QueryParam("efternamn") String efternamn,
@QueryParam("epost") String epost,
@QueryParam("epost2") String epost2,
@QueryParam("password") String password
){
User user = new User();
user.setEmail(epost);
user.setPassword(password);
user.setFornamn(fornamn);
user.setEfternamn(efternamn);
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public String firstMethod(){
User user = new User();
user.setEmail("sam.gholizadeh");
return "unfisnihedmethod";
}
}
我已经按照本教程http://docs.oracle.com/cd/E12839_01/web.1111/e13734/stateful.htm进行了操作,但正如前面提到的那样,我不确定如何为访问者分配会话ID而实现跟踪逻辑的方式和位置。
编辑:控制器类应该是有状态还是无状态?
答案 0 :(得分:1)
由于您使用的是JAX-RS,使用JAX-RS直接获取HttpServletRequest
更容易:
@Path("controller")
@Stateless
public class ControllerEJB {
@POST
public void registerUser(
@QueryParam("fornamn") String fornamn,
@QueryParam("efternamn") String efternamn,
@QueryParam("epost") String epost,
@QueryParam("epost2") String epost2,
@QueryParam("password") String password,
@Context HttpServletRequest request){
HttpSession session = request.getSession(true);
...
}
}