2012-11-14 53 views
3

我试图在没有web.xml配置的情况下部署一个非常简单的jaxrs应用程序,并且无法使其工作。我期望访问的网址是serverandport/{appname}/rest/welcomes/hello,我想我必须错过某些显而易见的事情。如何在没有web.xml的情况下实现jaxrs应用程序

应用

@ApplicationPath("/rest") 
public class EngineApp extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> s = new HashSet<Class<?>>(); 
     s.add(RestTestImpl.class); 
     return s; 
    } 

} 

资源

@Path("/welcomes") 
public class RestTestImpl { 
    @GET 
    @Path("hello") 
    public String sayPlainHello() { 
     return "Hi from Rest"; 
    } 
} 

POM片断

<groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
     <failOnMissingWebXml>false</failOnMissingWebXml> 
    </configuration> 

编辑:继响应以下,我试图与一个空web.xml和也使用以下web.xml。烦也返回404,但下面的XML声明“的Servlet javax.ws.rs.core.Application不可用”:

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > 
    <servlet> 
     <servlet-name>javax.ws.rs.core.Application</servlet-name> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>javax.ws.rs.core.Application</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

</web-app> 
+0

你得到一个404从你的应用服务器?你可以仔细检查服务器是否正常运行并且在日志中没有任何错误地部署应用程序? – jabal

+0

你在什么应用服务器上部署它? – jabal

+0

是的,我得到了404。该应用程序已成功部署,因为我添加了一个我可以打到的测试JSP。它部署在apache tomcat 6. – edwardmlyte

回答

3

您需要将您的应用程序部署到一个Servlet 3.0兼容的容器来利用此功能的优势。尝试GlassFish 3.xTomcat 7

+0

我刚刚阅读了关于servlet 3.0支持的内容(请参阅[球衣文档](http://jersey.java.net/nonav/documentation/latest/jax-rs.html)中的示例2.8和2.9)。 GF3工作正常,Tomcat 7上的相同应用程序在javax.ws.rs.core.UriBuilder.uri上引发AbstractMethodError。无论如何,随着GF3的作品,我会标记你的答案是正确的。谢谢。 – edwardmlyte

+0

这不会**在像Tomcat这样的servlet容器上工作。请参阅我的答案[这里](http://stackoverflow.com/questions/9373081/how-to-set-up-jax-rs-application-using-annotations-only-no-web-xml)。 –

0

我发现了一个非常类似的问题和问题发现那里可以帮助你。我肯定会尝试一个空的web.xml 3.0模式版本,看看它是否有帮助。

JBoss AS 7 Restful Webservices not auto deploying

+0

我更新了我的Q以包含我尝试过的web.xml。一个空的和上面的一个也没有帮助。虽然我得到了更详细的错误信息。 – edwardmlyte

-3

对于希望使用了Servlet 2.0规范,创建一个web.xml,然后添加在球衣的servlet行家依赖那些:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <servlet> 
     <servlet-name>REST Service</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>com.mycompany.rest.engine.EngineApp</param-value> 
     </init-param> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>REST Service</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

添加依赖性POM

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-servlet</artifactId> 
    <version>1.13</version> 
</dependency> 
相关问题