2014-01-16 65 views
2

重要的部分是:不带web.xml。将Jersey MVC配置为在没有web.xml的情况下可视化

我已经有一个运行在Glassfish 3.1.2.2上的没有web.xml的JAX-RS应用程序,完全由注释配置。

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

我在许多答案中看到如何使用web.xml配置来做到这一点,但没有人提到如何在没有web.xml文件的情况下映射资源。

目前我在资源目录下有一个ui.html文件,一个JAX-RS应用程序子类和一个资源类。项目中没有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

什么是你的应用程序的路径?如果它是“/”,那么它基本上隐藏了任何模板,Jersey将无法查看它们,除非将它注册为过滤器而不是servlet。没有web.xml,注册为过滤器是不可能的。 –

+0

我有一个'正确'的应用程序路径,并且资源类也有自己的定义,所以不应该成为问题。 我现在可以看到,这个问题不够好,今天晚上将创建一个小型,重点突出的示例项目。如果你也看一下,请提前致谢。 –

回答

1

彼得·梅斯,我相信这是可能通过使用扩展org.glassfish.jersey.servlet.ServletContainer(新泽西州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; 

} 
相关问题