dea*_*mon 33 java deployment servlets jax-rs
JAX-RS 1.1规范在第6页说:
如果没有Application子类,则添加的servlet必须命名为:
Run Code Online (Sandbox Code Playgroud)javax.ws.rs.core.Application
添加的servlet是什么?它可能是一个任意的servlet吗?
如果存在Application子类,并且已经定义了一个servlet具有名为的servlet初始化参数:
Run Code Online (Sandbox Code Playgroud)javax.ws.rs.Application
再说一次,这里的"servlet"是什么?
如果存在未由现有servlet处理的Application子类,则ContainerInitializer添加的servlet必须使用Application子类的完全限定名称命名.
"由ContainerInitializer添加的servlet"是否意味着自动添加servlet?配置如何?
目前我既不使用Application类也不使用web.xml,它可以使用(使用GlassFish 3.1).这种部署机制是否需要完整的类路径扫描,这对于大型库来说可能会很慢?
如何在Servlet容器上部署?
Web中存在令人困惑的配置选项.在web.xml中使用context params查看此示例(对我来说不起作用!).部署JAX-RS应用程序的首选方法是什么?
Bry*_*Luk 63
有许多选项可用于部署到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>
Run Code Online (Sandbox Code Playgroud)
然后,您的Web应用程序中找到的所有@Path和@Provider类将在"默认"JAX-RS应用程序中可用,其servlet 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>
Run Code Online (Sandbox Code Playgroud)
如果您希望仅返回URL上的特定@Path/ @Provider类集合,则可能需要执行上述操作(因此您可以在第二个MyApplication2上面使用不同的URL模式).
您也可以web.xml完全跳过整个过程,只需注释您的MyApplication类@ApplicationPath,它将作为URL模式.我建议保留web.xml在任何情况下,因为您可能不得不在那里添加有关Web应用程序的其他信息.
如果您想知道servlet-class它来自何处,它会自动添加到环境中.您可以通过查看Servlet 3.0获得一个想法ServletContext.
在 WAS 8.5 中,我更改了 web.xml 以添加:
<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>
Run Code Online (Sandbox Code Playgroud)
我的 RestApplication 看起来像:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我的 RestService 看起来像
@Path("/tada")
public class RestService {
@GET
public String getSomething() {
return "tada";
}
}
Run Code Online (Sandbox Code Playgroud)
我在 pom.xml 中添加了依赖项:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62605 次 |
| 最近记录: |