gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:00:24 26 4
gpt4 key购买 nike

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

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

javax.ws.rs.core.Application

添加的 servlet 是什么?会不会是一个任意的 servlet?

If an Application subclass is present and there is already a servlet defined that has a servlet initialization parameter named:

javax.ws.rs.Application

再次,这里的“servlet”是什么?

If an Application subclass is present that is not being handled by an existing servlet then the servlet added by the ContainerInitializer MUST be named with the fully qualified name of the Application subclass.

“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 类将在“默认”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>

如果您希望只在 URL 上返回特定的 @Path/@Provider 类集,您可能需要执行上述操作(这样您就可以有第二个MyApplication2 与上述不同的 URL 模式)。

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

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

关于java - 如何部署 JAX-RS 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2072295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com