我正在尝试将应用程序部署到独立的Jetty 9.4服务器上。我正在为我的web服务使用restasy,但到目前为止,我很难找到清晰的示例或教程来解释我需要如何配置一切以使其工作。到目前为止,我找到的每个示例似乎都是针对jboss服务器、不同的rest框架(如Jersey)或嵌入式jetty服务器的。我试着从我能挖到的一些碎片中拼凑出一些东西,但没有成功。当我尝试向我的web服务发出GET请求时,我只是以404错误结束。如果你能给我指明正确的方向,我将不胜感激。
下面是一些文件来演示我当前的配置:
jetty-web.xml
<Configure id="eyerep-data" class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/eyerep-data</Set>
<Set name="war"><SystemProperty name="jetty.monitorDir" default="./webapps" />/eyerep-data.war</Set>
</Configure>
web . xml
<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"
>
<context-param>
<param-name>appName</param-name>
<param-value>eyerep</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/api</param-value>
</context-param>
<context-param>
<param-name>resteasy.guice.modules</param-name>
<param-value>com.google.inject.servlet.ServletModule,com.tura.eyerep.guice.EyerepGuiceModule</param-value>
</context-param>
<context-param>
<param-name>resteasy.guice.holder</param-name>
<param-value>com.tura.eyerep.guice.Guice</param-value>
</context-param>
<listener>
<listener-class>com.tura.eyerep.guice.resteasy.MyGuiceResteasyBootstrapServletContextListener
</listener-class>
</listener>
<listener>
<listener-class>com.tura.eyerep.servlet.StartupShutdownListener</listener-class>
</listener>
<filter>
<filter-name>GuiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher</servlet-class>
<async-supported>true</async-supported>
</servlet>
<filter-mapping>
<filter-name>GuiceFilter</filter-name>
<servlet-name>Resteasy</servlet-name>
</filter-mapping>
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/api/*</url-pattern>
<url-pattern>/auth/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
</web-app>
My Service Class:
@Path("/api")
public class ExportDataApi {
@GET
@Path("/data/export/repName/{repId}")
public Response getRepName(@PathParam("repId") String repId)
{
...
}
}
我想我终于找到答案了。这个项目是基于一个使用旧版本jetty 9的应用程序。据我所知,在码头的某个地方。从jetty的命令行选项中删除了monitorDir。由于该选项无效,它会回落到默认值,这就是为什么当我将war直接放在webapps/下时,我的应用程序可以正常工作。
要使它工作,我需要做两个更改。在jetty-web.xml中,我需要将war配置更改为:
<Set name="war"><SystemProperty name="jetty.base" default="./webapps" />/eyerep-data/eyerep-data.war</Set>
然后在start.ini中,我必须找到'deploy'模块的部分,取消对jetty.deploy.monitoredDir的设置的注释,并将其更改为
jetty.deploy.monitoredDir=webapps/eyerep-data