如何从jsp调用会话bean

时间:2010-05-11 06:22:32

标签: ejb

我是ejb的新手。实际上我已经创建了一个ejb,我添加了一个Web应用程序的引用,它将简单地调用会话bean。如何从jsp文件中调用会话bean?

6 个答案:

答案 0 :(得分:4)

我也希望您将MVC模型用于您的应用程序。在这种情况下,不需要从jsp调用会话bean,你可以从servlet本身调用它。

查看此链接以从servlet调用EJB。 Click

答案 1 :(得分:2)

我试图在Wildfly上做到这一点,但是使用@EJB注释没有成功,可能JSP没有CDI。所以我已经以另一种方式实现了它(不那么明亮):

之前:

<%
    LoginAction loginAction;

    try {
        Properties properties = new Properties();
        properties.put("jboss.naming.client.ejb.context", true);
        properties.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming");
        Context ctx=new InitialContext(properties);
        loginAction = (LoginAction) ctx.lookup("java:module/LoginAction");

        session.setAttribute("loginAction", loginAction); //this is to be able to use loginAction on EL Expressions!
    } catch (Exception e) {
        e.printStackTrace();
    }
%>

其余的都保持不变!

答案 2 :(得分:0)

1)第一种方法是创建直接对象

使用import标签导入你的课程

< % @ page import = packageName.Classname %>
    <%
    @EJB
    Classname object = new Classname();
    %>

然后使用普通的jsp访问方法

<%=object.callmethod()%>

2)另一种方式是使用标准动作

<jsp:useBean id="beanId' class="packagename.ClassName" />
<jsp:getStudentInfo name="beanId" property="name"/>

答案 3 :(得分:0)

当你在服务层和MVC中使用EJB时​​,我永远不会建议从你的视图或jsp调用会话bean。你可以通过使用@EJB注释注入EJB引用来调用会话bean方法。

答案 4 :(得分:0)

Simple..Override Jsp的jspInit方法并创建InitialContext对象.. InitialContext对象可以访问所有分配了JNDI名称的资源。

<%!

BeanIntefaceName instanceName;

%>   

<%
public void jspInit()
{
    instanceName = (BeanIntefaceName)new InitialContext().lookup("java:global/[application_name]/[module_name]/[enterprise_bean_name]/[inteface_name]");
}

instanceName.yourMethodName();
%>

答案 5 :(得分:0)

您可以以最佳方式混合搭配以支持多个应用程序服务器。 下面的代码使用WebSphere Liberty的@EJB注入和JBoss Wildfly的InitialContext

<%!

@EJB
GitlabHelper gitAPI;

public void jspInit() {

    if (gitAPI == null) {

    try {
        gitAPI = (GitlabHelper) new InitialContext().lookup("java:module/GitlabHelper");
        System.out.println("<!-- initContext has been used -->");
    } catch (Exception e) {
        e.printStackTrace();
    }
    }
}

%>