2

我有一个 login.java servlet,正如它的名字所说,它为我的 Web 应用程序提供了登录工具。

我是新手,我正在使用 EJB 3.1 和 EE 6。在我的 LoginBean.java EBJ 中,我有一个无参数构造函数和另一个有一些参数(电子邮件、密码等)的构造函数。

在 servlet 代码中的某个时刻,我调用实例化我的 EJB:

@EJB LoginBean loginBean;

我想知道是否有可能(以及如何)调用另一个构造函数而不是零参数的构造函数。

非常感谢。干杯。

4

2 回答 2

4

你不想那样做。同一个 servlet 在所有用户之间共享,因此 EJB 也在所有用户之间共享。您不想将特定于用户的数据存储为 servlet 或 EJB 类的实例变量。它将在所有网页访问者之间共享。

doPost()而是将参数移动到您在登录 servlet的方法中调用的 EJB 方法。

User user = loginBean.login(username, password);

然后在成功时将其存储在 HTTP 会话中

request.getSession().setAttribute("user", user);

这样您的 webapp 的其余部分就可以对此进行拦截以确定用户是否已登录。

if (request.getSession().getAttribute("user") != null) {
    // User is logged in.
} else {
    // User is not logged in.
}
于 2011-03-16T18:08:07.373 回答
1

我 100% 同意 BalusC。除了他的回答之外,我想补充一点,您通常*从不显式引用 EJB bean 的构造函数,即使这样做在理论上是有意义的(例如,当传递一些依赖项或一些配置参数时)。

EJB bean 是托管对象,您在 @EJB 注释字段中得到的不是实际对象,而是stub(代理)。存根指向的实际对象实例很可能早在您获得此存根之前就已构建,并且很可能来自池。

(*)某些类型的单元测试可能是此规则的例外。

于 2011-03-17T19:31:48.230 回答