gpt4 book ai didi

java - 使用 jetty+guice 运行 war

转载 作者:行者123 更新时间:2023-12-02 06:13:48 25 4
gpt4 key购买 nike

这是一个关于更好地将嵌入jetty的代码与连接servlet的代码分开的问题。

我正在努力适应this sample code这样我将获得一个可运行的 war ,即一个 war 文件,我可以将其放入现有的 Jetty 容器中,或者使用像 java -jar webapp-runnable.war 这样的命令独立运行。示例代码属于这两篇博文:No.1 , No.2 .

我关注了GuiceServlet manual并创建了一个 web.xmlGuiceServletContextListener (见下文),但它们似乎并没有让我与 mvn jetty:run 走得太远;当我尝试运行 mvn jetty:run 时,出现以下错误:

[main] DEBUG org.eclipse.jetty.util.log - Logging to Logger[org.eclipse.jetty.util.log] via org.eclipse.jetty.util.log.Slf4jLog
WARN:oejw.WebAppContext:main: Failed startup of context o.e.j.m.p.JettyWebAppContext@3cceafcb{/,file:/[...]/src/main/webapp/,STARTING}{file:/[...]/src/main/webapp/}
com.google.inject.ConfigurationException: Guice configuration errors:||1) Explicit bindings are required and com.google.inject.servlet.InternalServletModule$BackwardsCompatibleServletContextProvider is not explicitly bound.| while locating com.google.inject.servlet.InternalServletModule$BackwardsCompatibleServletContextProvider||1 error
at [stack strace clipped]

这是我的代码。 如前所述,我从 this repo on github 开始。 .

1) 我从 com.teamlazerbeez.http.HttpServerMain 中提取了 AbstractModule 类型的匿名内部类并将其放入新类com.teamlazerbeez.http.HttpServerModule中。该类现在在创建 Guice 注入(inject)器时实例化 in HttpServerMain (l36) .

2) 我的 web.xml:

<?xml version="1.0" ?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
metadata-complete="false"
version="3.0">

<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.teamlazerbeez.http.GuiceServletConfig</listener-class>
</listener>
</web-app>

3) 我的com.teamlazerbeez.http.GuiceServletConfig:

public class GuiceServletConfig extends GuiceServletContextListener {

@Override
protected Injector getInjector() {
//I know this code not come close to doing what I want, but I just don't know where to start
return Guice.createInjector(new HttpServerModule());
}

}

我的问题:如何重构 HttpServerMain main 方法和 HttpServerModule 以便他们描述的设置过程对我的 GuiceServletConfig 可用吗? GuiceServletConfig 必须是什么样子才能正常工作?

最佳答案

我从来没有像 jar 那样发生过 war ,所以我总是选择两种解决方案之一。然而,当使用 war 时,设置一个在 IDE 中运行的嵌入式 Jetty 服务器并不困难。为此,您可以使用 WebAppContext 通过 web.xml 进行设置。请参阅this documentation举个例子。从那里开始,一切都应该按照 Guice 网站上的建议进行。

但是,这不会创建可运行的 war (如 java -jar yourapp.war),因为 jar 具有不同的内部布局。但是,如果您愿意,可以使用 jetty-runner使用 java -jar jetty-runner.jar yourapp.war 修复此问题。

关于java - 使用 jetty+guice 运行 war ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com