How to deploy a JAX-RS application?

前端 未结 4 641
没有蜡笔的小新
没有蜡笔的小新 2020-11-29 19:16

The JAX-RS 1.1 specification says on page 6:

If no Application subclass is present the added servlet MUST be named:

javax.ws.rs.core         


        
相关标签:
4条回答
  • 2020-11-29 19:36

    With Servlet3.0, follow this. This works for me.

    <servlet>
        <description>JAX-RS Tools Generated - Do not modify</description>
        <servlet-name>JAX-RS Servlet</servlet-name>
        <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>your.restsrv.config.RESTConfig</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <enabled>true</enabled>
        <async-supported>false</async-supported>
    </servlet>
    <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>/rest/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>JAX-RS Servlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    
    0 讨论(0)
  • 2020-11-29 19:39

    As I said in the comment above, it all depends on the framework you want to use.

    http://syrupsucker.blogspot.com/2008/10/deploying-jersey-in-tomcat-60.html for Jersey http://syrupsucker.blogspot.com/2008/10/deploying-resteasy-in-tomcat-60.html for RESTeasy

    As far as I know, JAX-RS does not contain a specification for deployment.

    0 讨论(0)
  • 2020-11-29 19:44

    There are a number of options for deploying into a Java EE 6 container (more specifically a Servlet 3.0 implementation):

    The simplest is:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd" version="3.0">
        <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>/rest/*</url-pattern>
        </servlet-mapping>
    </web-app>
    

    Then all the @Path and @Provider classes found in your web application will be available in the "default" JAX-RS application with a servlet URL pattern of "/rest/*".

    If you have one or more classes that extends javax.ws.rs.core.Application, you can specify like so:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd" version="3.0">
        <servlet>
            <servlet-name>com.example.jaxrs.MyApplication</servlet-name>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>com.example.jaxrs.MyApplication</servlet-name>
            <url-pattern>/rest/*</url-pattern>
        </servlet-mapping>
    </web-app>
    

    You may want to do the above in case you wish to only return specific sets of @Path/@Provider classes on a URL (so you could have a second MyApplication2 with a different URL pattern above).

    You can also skip the whole web.xml altogether and just annotate your MyApplication class wih @ApplicationPath which will serve as the URL pattern. I would recommend keeping the web.xml in any case because you will probably have to add other information about the web application there anyway.

    If you're wondering where the servlet-class comes from, it is automatically added in by the environment. You can get an idea by looking at the Servlet 3.0 ServletContext.

    0 讨论(0)
  • 2020-11-29 19:55

    With WAS 8.5, I change the web.xml to add:

    <servlet>
        <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.tada.rest.RestApplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
    </servlet>
    <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
    

    My RestApplication look like :

    import java.util.HashSet;
    import java.util.Set;
    
    import javax.ws.rs.core.Application;
    
    public class RestApplication extends Application {
    
        @Override
        public Set<Class<?>> getClasses() {
            Set<Class<?>> sets = new HashSet<Class<?>>();
            sets.add(RestService.class);
            return sets;
        }
    }
    

    My RestService looks like

    @Path("/tada")
    public class RestService {
        @GET
        public String getSomething() {
            return "tada";
        }
    }
    

    And I add in the pom.xml the dependency:

    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
    </dependency>
    
    0 讨论(0)
提交回复
热议问题