JSP bean

时间:2017-03-29 18:09:28

标签: java jsp jetty guice

我正在编写一个使用Guice作为我的DI框架和Hibernate作为我的Orm的Java应用程序。我想运行一个简单的嵌入式Jetty服务器来提供几个jsp页面。我设法使用以下代码运行服务器:

Server server = new Server(8081);
final WebAppContext webAppContext = new WebAppContext();
webAppContext.setContextPath("/rpga");
webAppContext.setResourceBase("web/WEB-INF/");
webAppContext.setDescriptor("web/WEB-INF/web.xml");
webAppContext.setParentLoaderPriority(true);

final Configuration.ClassList classlist = Configuration.ClassList.setServerDefault(server);
classlist.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration","org.eclipse.jetty.annotations.AnnotationConfiguration");

webAppContext.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/[^/]*taglibs.*\\.jar$|.*/classes/.*");

webAppContext.setServer(server);

server.setHandler(webAppContext);
server.start();
server.join();

我现在想用几个简单的bean在我的jsp中添加一些数据。我尝试创建一个bean并在其中注入我的dao,但由于bean不是由Guice管理的,所以不会注入Dao。

我的JSP看起来像

<html>
   <head>
      <title>Playlist</title>
   </head>
   <body>
        <jsp:useBean id="playlist" class="com.duom.beans.PlaylistBean" /> 
        ...do stuff with playlistBean
   </body>
</html>

我的豆子:

import com.google.inject.Inject;

public class PlaylistBean {

    @Inject
    private PlaylistDao playlistDao;

    ...do stuff
}

为实现目标,我错过了什么?

1 个答案:

答案 0 :(得分:1)

我设法找到了解决问题的方法。我设法清理了我的意图,并使用正确的技术重启我的开发人员。

我从JSP切换到JSF2,我为Guice注入器创建了一个工厂类:

public class GuiceFactory {

    private static final Injector injector = Guice.createInjector(new RpgaAppModule());

    public static Injector getInjector() {
        return injector;
    }
}

然后在我的bean的每个构造函数上调用:

GuiceFactory.getInjector().injectMembers(this);

如果我的解决方案在设计或架构方面存在问题,请不要犹豫。