Java 使用Jetty/Jersey/Guice提供静态内容
类似于另一个问题(参见),我想提供Jetty的静态内容。在浩瀚的互联网上散布着几个类似的问题,但大多数都不涉及Guice,而那些涉及Guice的问题已经完全过时了 我有一个现有的服务,它使用Jersey(1.12)和Guice(3)以及以下Java 使用Jetty/Jersey/Guice提供静态内容,java,jakarta-ee,jetty,jersey,guice,Java,Jakarta Ee,Jetty,Jersey,Guice,类似于另一个问题(参见),我想提供Jetty的静态内容。在浩瀚的互联网上散布着几个类似的问题,但大多数都不涉及Guice,而那些涉及Guice的问题已经完全过时了 我有一个现有的服务,它使用Jersey(1.12)和Guice(3)以及以下web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.
web.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<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_2_5.xsd" version="2.5">
<display-name>My Service</display-name>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<listener>
<listener-class>com.example.MyGuiceConfig</listener-class>
</listener>
<filter>
<filter-name>Guice Filter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Guice Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
当我使用mvnjetty:run
调用JettyMaven插件时,我的服务按预期工作。但是,对静态内容的任何请求都会生成404
如何在不影响服务的情况下提供任意静态内容?(即,不需要我更改技术堆栈的最小更改?您如何配置Jersey将在Jersey ServletModule中处理的url片段?如果您指定的前缀与静态内容不冲突,它应该可以工作
public class Config extends GuiceServletContextListener {
protected Injector getInjector() {
return Guice.createInjector(
new JerseyServletModule() {
protected void configureServlets() {
bind(Service.class);
serve("/services/*").with(GuiceContainer.class);
}
});
}
}
及
应该从主机8080/services/service和webapp中包含的静态资源为Servlet.class提供服务
编辑请参阅,以了解在不更改REST端点路径的情况下实现此操作的另一种方法。查看这是否对您有帮助我没有
JerseyServletModule
。不需要创建或提供.war
。您在com.example.MyGuiceConfig中配置了什么?你是如何通知Guice要注入哪些Jersey服务类的?哦,对不起,你是对的。它在MyGuiceConfig中。我发布了代码。如果您要求Jetty GuiceContainer提供“/*”服务,我相信它会在不知道静态资源的情况下拦截每个请求。您可以将该路径更改为“/services/*”或类似的路径吗?那么GuiceContainer就不应该隐藏你的静态资源了。谢谢你的帮助。在我将容器更改为服务“/api/*”并清除了一些旧的积垢之后,它正在服务静态资源。
public class Config extends GuiceServletContextListener {
protected Injector getInjector() {
return Guice.createInjector(
new JerseyServletModule() {
protected void configureServlets() {
bind(Service.class);
serve("/services/*").with(GuiceContainer.class);
}
});
}
}
@Singleton
@Path("/service")
@Produces({MediaType.TEXT_PLAIN})
public class Service {
@GET
public String run() {
return "Service running";
}
}