当前位置: 首页 > 知识库问答 >
问题:

HttpSession与EJb的组合

罗甫
2023-03-14

我试图找出结合纯EJB web服务处理httpsession的最佳方法。我已经创建了一个实用程序类,我有一个控制器类。在controller类中实例化实用程序类的最佳位置是哪里?计划是每个访问/调用webservice(即第一次使用网站)的用户都应该为他们分配一个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的逻辑。

编辑:控制器类应该是有状态的还是无状态的?

共有1个答案

鄂昌胤
2023-03-14

由于您使用的是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);

           ...

    }
}
 类似资料:
  • 问题内容: 如果我想使用Web应用程序跟踪与每个客户端的对话状态,那么哪个更好的替代方法是使用Session Bean还是HTTP Session? 使用HTTP会话: 使用会话EJB: 在执行ServletContextListener时注册为Web应用程序侦听器: 在JSP中: 同一JSP正文中的其他地方: 在我看来,它们几乎是相同的,主要区别在于UserState实例是在前者中传输的,而在后

  • 问题内容: 是在Java Servlet中仅在创建HttpSession之后 ? 在我的代码中我没有写,但是当我使用时,它不起作用。为什么? 问题答案: 调用request.getSession()时创建一个HttpSession。 但是, 如果您默认访问JSP,它将自动创建一个会话。可以使用以下方式禁用此行为: 您在使用JSP吗?

  • btg-httpsession是实现了httpsession标准适用于普通web项目和jfinal项目的分布式session 使用方式 一、配置方式:1、通过filter配置(非jfinal项目推荐配置方式); /** * * BTGHttpSessionRequest替换filter(local session管理) * 注意:此filter优先级必须大于业务系统处

  • 问题内容: 将应用程序部署为EAR(具有1个EJB和1个WAR模块)与单独的模块有什么区别?我想使用GlassFish 3 Web配置文件,但它不支持EAR存档。我可以简单地将EJB和WAR用作单独的模块吗?还有其他选择吗? 问题答案: 3种部署变体之间似乎有些混淆: 包含EJB和WEB模块的EAR 部署单独的EJB模块和单独的WEB模块 部署包含EJB类或EJB jar的WEB模块。 在第一种情

  • 我使用JDK1.6.0_24,当我尝试用Mockito模拟HTTP会话时,我出现了下一个错误:

  • 我不能在HttpSession上进行模拟。测试方法如下所示: 测试结果如下所示: 我总是得到未经授权的例外,但我需要避免它。如何为会话添加一些参数来模拟工作?