配置Jersey MVC以在没有web.xml的情况下提供Viewable

时间:2014-01-16 10:23:40

标签: java model-view-controller jax-rs web.xml jersey-2.0

重要的部分是:没有web.xml。

我已经在Glassfish 3.1.2.2上运行了一个工作的JAX-RS应用程序,没有web.xml,纯粹是通过注释配置的。

问题是,如何维护web.xml-less nirvana并仍然使用Jersey MVC从我的Maven .war项目的资源或webapp目录中提供静态资源?

我在许多答案中看到如何使用web.xml配置执行此操作,但没有人提到如何在没有web.xml文件的情况下映射资源。

目前,我在资源目录下有一个ui.html文件,一个JAX-RS Application子类和一个资源类。项目中没有web.xml,以下工作正常:

@Path("/ui")
@GET
public Response ui() {
    String content = "Hello StackOverflow";
    return Response.ok(content).build();
}

虽然这一个因解析器的IOException而失败:

   @Path("/ui")
   @GET
   public Response ui() {
      Viewable viewable = new Viewable("/ui.html");
      return Response.ok(viewable).build();
   }

java.io.IOException:模板名称/ui.html无法解析为完全限定的模板名称 我也尝试用相对路径指定它,但这也没有用。

我在泽西岛使用的依赖关系如下:

     <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.18</version>
    </dependency>

我理解一个适当的示例项目是最好的并愿意提供,如果人们很难弄清楚我在说什么,请告诉我。

1 个答案:

答案 0 :(得分:2)

Peter Metz,我相信这可以通过在扩展org.glassfish.jersey.servlet.ServletContainer(Jersey 2.26)的类上使用@WebFilter注释来实现: -

package com.myorg.myapp.config;

import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;

import org.glassfish.jersey.servlet.ServletContainer;

@WebFilter(value = "/*", initParams = @WebInitParam(name = "javax.ws.rs.Application", value = "com.myorg.myapp.config.JerseyConfig"))
public class JerseyFilter extends ServletContainer {

    private static final long serialVersionUID = 1L;

}