Существует несколько вариантов развертывания в контейнере Java EE 6 (точнее, реализации Servlet 3.0):
Самое простое:
<?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>
Тогда все классы @Path
и @Provider
, найденные в вашем веб-приложении, будут доступны в приложении JAX-RS "по умолчанию" с шаблоном URL сервлета "/rest/*"
.
Если у вас есть один или несколько классов, расширяющих javax.ws.rs.core.Application
, вы можете указать так:
<?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>
Возможно, вы захотите сделать это в случае, если вы хотите возвращать только определенные наборы @Path
/ @Provider
классов для URL (так что вы можете иметь второй MyApplication2 с другим шаблоном URL выше).
Вы также можете полностью пропустить web.xml
и просто аннотировать свой MyApplication
класс с @ApplicationPath
, который будет служить шаблоном URL. Я бы порекомендовал сохранить web.xml
в любом случае, потому что вам, вероятно, все равно придется добавлять туда другую информацию о веб-приложении.
Если вам интересно, откуда взялся servlet-class
, он автоматически добавляется окружением. Вы можете получить представление, посмотрев на сервлет 3.0 ServletContext
.