2
我正在写一个使用Guice作为我的DI框架和Hibernate作为我的Orm的java应用程序。我想运行一个简单的嵌入式Jetty服务器来提供几个jsp页面。我设法使用下面的代码来运行服务器:JSP bean中的Guice注入
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();
现在我想用几个简单的豆在我的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
}
缺少什么我实现我的目标是什么?
我不认为你可以。如果你想在JSP中使用DI,你需要使用Java EE的CDI框架。除非你想让你自己的JSP标签调用一个工厂直接传递给Guice注入器来获取实例。 (请注意,这绝对是一个黑客,而不是一个好的)。 –
感谢您的回复,我终于找到了解决方案,看到我的答案在下面! – Duom