如何部署JAX-RS应用程序? - java

JAX-RS 1.1规范在第6页上说:

如果不存在Application子类
添加的servlet必须命名为:

javax.ws.rs.core.Application

添加的servlet是什么?可以是任意servlet吗?

如果存在Application子类
并且已经定义了一个servlet
具有Servlet初始化
参数名为:

javax.ws.rs.Application

同样,这里的“servlet”是什么?

如果存在Application子类
那不是由
现有的servlet,然后是servlet
由ContainerInitializer添加
以全限定名命名
Application子类的名称。

“ContainerInitializer添加的servlet”是否意味着该servlet是自动添加的?配置如何?

目前,我既不使用Application类也不使用web.xml,并且它可以工作(在GlassFish 3.1中)。这种部署机制是否需要完整的类路径扫描,而大型库可能会比较慢?

如何部署在Servlet容器上?

网络中有许多令人困惑的配置选项。看到这个example with context params in the web.xml(对我不起作用!)。部署JAX-RS应用程序的首选方法是什么?

参考方案

有许多选项可用于部署到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>

然后,在Web应用程序中找到的所有@Path@Provider类将在servlet URL模式为"/rest/*"的“默认” JAX-RS应用程序中可用。

如果您有一个或多个扩展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>

如果您只希望在URL上返回特定的@Path / @Provider类集,则可能需要执行上述操作(因此,您可以在上面的第二个MyApplication2中使用不同的URL模式)。

您也可以完全跳过整个web.xml,而仅用MyApplication注释@ApplicationPath类,它将用作URL模式。我建议无论如何都要保留web.xml,因为无论如何您可能都必须在其中添加有关Web应用程序的其他信息。

如果您想知道servlet-class的来源,环境会自动添加它。您可以通过查看Servlet 3.0 ServletContext获得一个想法。

休眠映射<键,设置<值>> - java

我有以下表格:@Entity @Table(name = "events") Event --id --name @Entity @Table(name = "state") State --id --name @Entity @Table(name = "action") Action --id …

SOAPFaultException部署在Tomcat上时,但在GlassFish中工作正常 - java

朋友们,我一直在尝试很多,阅读了很多论坛,但无法理解为什么出现此问题。我使用契约优先方法创建了一个Jax-WS WebService。创建WSDL和XSD,然后使用wsimport工具生成其余工件,为SEI提供实现。将WebService应用程序部署到Eclipse Helios中的GlassFish(Glassfish适配器和Eclipse中安装的插件)。…

Java Applet的URLConnection与PHP无效 - java

我已经研究了Oracle文档和示例,但仍然无法正常工作。我有一个Java Applet,它只是尝试使用URLConnection和OutputStreamWriter通过POST将文本字段发送到PHP脚本。 Java方面似乎工作正常,没有引发异常,但是PHP在我的页面上未显示任何输出。我是PHP新手,因此请耐心等待。这是相关的Java部分: try { UR…

页面加载而不是提交时发生struts验证 - java

请原谅我;我对Struts有点陌生。我遇到一个问题,即页面加载而不是我实际提交表单时发生了验证。我整天都在论坛上搜寻和搜寻,没有任何运气。我显然做错了一些事情,应该很容易确定,但是我还没有发现问题所在。这是我的struts.xml的片段:<action name="*Test" method="{1}" clas…

无法从ArrayList <String>转换为List <Comparable> - java

当我写下面的代码时,编译器说 无法从ArrayList<String>转换为List<Comparable>private List<Comparable> get(){ return new ArrayList<String>(); } 但是当我用通配符编写返回类型时,代码会编译。private List&l…