Jak wdrożyć aplikację JAX-RS?
Specyfikacja JAX-RS 1.1 mówi na stronie 6:
Jeśli nie ma podklasy aplikacji dodany servlet musi mieć nazwę:
javax.ws.rs.core.Application
Co to jest dodany servlet? Czy to może być dowolny servlet?
Jeśli występuje podklasa aplikacji i jest już zdefiniowany servlet który ma inicjalizację servleta parametr o nazwie:
javax.ws.rs.Application
Znowu, co to jest "servlet" tutaj?
Jeśli występuje podklasa aplikacji to nie jest obsługiwane przez istniejący servlet następnie servlet dodany przez ContainerInitializer musi być nazwane z pełną kwalifikowaną nazwą podklasy aplikacji.
Czy "servlet dodany przez ContainerInitializer" oznacza, że servlety są dodawane automatycznie? Jak wyglądałaby konfiguracja?
W tej chwili nie używam ani klasy aplikacji, ani sieci.xml i działa (z GlassFish 3.1). Czy ten mechanizm wdrażania wymaga pełnej klasy skanowanie ścieżek, które może być powolne przy dużych bibliotekach?
Jak wdrożyć na kontenerze Servlet?
Istnieje myląca liczba opcji konfiguracyjnych w Internecie. Zobacz ten przykład Z paramami kontekstowymi w sieci.xml (nie działa dla mnie!). Jaki jest preferowany sposób wdrożenia aplikacji JAX-RS?
4 answers
W przeciwieństwie do Java EE 6, Java EE 6 nie jest implementowana w środowisku Java EE 6, ale jest implementowana w środowisku Java EE 6.]}
Najprostsze to:
<?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>
Wtedy wszystkie klasy @Path
i @Provider
Znalezione w Twojej aplikacji internetowej będą dostępne w "domyślnej" aplikacji JAX-RS z wzorcem URL servleta "/rest/*"
.
Jeśli masz jedną lub więcej klas, które rozszerzają javax.ws.rs.core.Application
, możesz określić Tak:
<?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>
Możesz zrobić powyższe w przypadku, gdy chcesz zwracają tylko określone zestawy @Path
/@Provider
klasy na URL (więc można mieć drugi My Application2 z innym wzorcem URL powyżej).
Możesz także pominąć całą web.xml
i po prostu dodać adnotację do swojej MyApplication
klasy wih @ApplicationPath
, która będzie służyć jako wzorzec URL. W każdym razie polecam zachować web.xml
, ponieważ prawdopodobnie będziesz musiał tam dodać inne informacje o aplikacji internetowej.
Jeśli zastanawiasz się skąd pochodzi servlet-class
, to jest automatycznie dodawane przez środowisko. Możesz się zorientować patrząc na Servlet 3.0 ServletContext
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-01 21:07:25
Z było 8.5, zmieniam sieć.xml do dodania:
<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>
Moja aplikacja wygląda tak:
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;
}
}
Moja RestService wygląda jak
@Path("/tada")
public class RestService {
@GET
public String getSomething() {
return "tada";
}
}
I dodaję do pom.XML zależność:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
</dependency>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-29 11:54:48
Z Servlet3. 0, wykonaj to. To mi pasuje.
<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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 12:44:44
Jak powiedziałem w komentarzu powyżej, wszystko zależy od frameworka, którego chcesz użyć.
Http://syrupsucker.blogspot.com/2008/10/deploying-jersey-in-tomcat-60.html dla Jersey http://syrupsucker.blogspot.com/2008/10/deploying-resteasy-in-tomcat-60.html dla RESTeasy
Z tego co wiem, JAX - RS nie zawiera specyfikacji wdrożenia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-19 10:05:02