我真的很困惑。我已经尝试过使用tomcat的Jax-rs并使用所有能够使用调用我的服务的注释url
。因此,没有Jax-
rs,我可以简单地拥有一个servlet并调用我的服务。同样,正如我尝试过的那样,有jax-rs和jersey(我研究了的实现JAX- RS
)以及web.xml中的以下内容。
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>OutputUi</display-name>
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>org.xxx.carbon.servlet</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
然后,我在GET上具有与JAX-RS相同的注释,可以使用正确的URL调用我的服务。
我的问题是,为什么球衣使用servlet?JAX-RS
不使用servlet?为什么使用JAX-RS
,而我们只能使用Servlet。
JAX-RS指定围绕Servlets [ 1
]的部署模型。为什么,因为在Java世界中,这就是运行Web应用程序的方式。请求进入Servlet容器(例如Tomcat或完整的Java
EE服务器中的容器),该容器将请求移交给Servlet应用程序,应用程序处理该请求并将响应发送回该容器,然后将其发送给客户。Spring
MVC是一个基于Servlet的框架(主要Servlet是DispatcherServlet
)。JSF是一个基于Servlet的框架(主要Servlet是FacesServlet
)。围绕Servlet构建JAX-
RS的方式相同(主要Servlet特定于实现;对于Jersey而言是ServletContainer
)。
请求进入Tomcat,它查找servlet映射,找到ServletContainer
与请求URL匹配的内容,将请求包装在中,然后将其发送HttpServletRequest
给Jersey
Servlet。现在,Jersey可以随心所欲地进行处理,这需要大量的处理;例如处理与您的方法[ 2
]匹配的请求,反序列化实体主体,以及使其他所有功能变为可能的其他功能。处理完成后,它将响应发送回容器。
为什么球衣使用servlet?
我认为以上已经阐明。
JAX-RS不使用servlet?
不确定我是否真的理解您的要求,但是JAX-
RS指定了其他部署模型,但是Servlet环境是唯一具有任何特定需求详细信息的环境。其他部署选项,例如在SE环境中,将是特定于实现的[ 1 ]。
为什么使用JAX-RS,而我们只能使用Servlet
您基本上是在问:“何时可以实现自己的REST框架,为什么要使用JAX-RS?”。通常,如果有可用的框架,请使用它。如果您觉得自己可以做得更好,那就去做。
[ 1
]-参见2.3出版物
[ 2
]-参见3.7将请求与资源方法匹配
因此,在OP上造成困惑的部分原因是他正在阅读的教程没有在web.xml文件中指定Servlet,这使OP认为“香草JAX-RS”(
(不存在)正在使用,而ant不是实现。
JAX-RS只是一个规范,没有实现就无法运行。是的,有一个javax.ws.rx-api.jar
或一个javaee-api.jar
具有用于 编译
JAX-RS应用程序的类/接口/注释,但是此jar中没有实际的“引擎”。实际的JAX-RS“引擎”位于特定的实现罐中。
我还没有看完整的教程,但是我假设它使用了上面的jar之一,这使OP相信没有使用JAX-RS实现。但是实际上,使用的Java
EE服务器(即Glassfish)在内部具有实现。如果是Glassfish,则为泽西岛。
另一个困惑点可能是在应用程序配置中。与其在OP的帖子中不使用web.xml,而是使用了一个Application
子类。就像是
@ApplicationPath("/rest")
public class AppConfig extends Application {
...
}
JAX-
RS规范指出,当带有注释的此类可用时,应使用上述完全限定的类名称作为Servlet名称来创建Servlet,并且将映射到的url为的值@ApplicationPath
。因此,无论您使用哪种实现,此行为都应该相同。
我需要在java上开发简单的web服务。我是java技术新手,根据几篇文章,我决定将JAX-RS(Jersey)与嵌入式http服务器(Grizzly2)结合使用,因为它看起来适合构建REST服务,部署似乎很简单。 在我的开发环境中,所有工作都很完美(使用IntllijIdea)。 但当我尝试在测试服务器上部署时,每个请求都返回“500内部错误”(偶数/application.wadl) 简单资源
我在WAS 8.0上部署了一个JAX-RS WS应用程序,其中包含一个空的2.4web.xml,这个类扩展了'javax.WS.rs.core.application'和2个资源,它工作得很好。 如何在WAS7.0上部署JAX-RS应用程序而不使用Jersey或任何其他与应用程序服务器相关的类? 谢谢
我有一个服务器Weblogic 12.1.3,带有JAX-RS 2。x作为共享库安装(参见。https://docs.oracle.com/middleware/1213/wls/RESTF/use-jersey20-ri.htm#RESTF297). 该共享库包括例如javax。ws。rs-api-2.0。jar和jersey-media-multipart-2.5.1。jar。 请注意,我不确
问题内容: 我对此并不陌生,请尝试阅读一些文档,但无法正常工作,请耐心等待。 我创建了一个使用这样的: 这是我的服务: 的是一个例外。 我尝试了这个: 但是,当我调用服务时,不会被调用。看来我可能缺少东西。那么如何定义这个异常呢? 请让我知道如何定义。 问题答案: 您需要使用注释您的异常映射器,否则它将永远不会在JAX- RS运行时中注册。
什么是resteasy?RESTEasy和JAX-RS有什么区别?和之间有什么区别?
我想在Grizzly 2上运行JAX-RS 2.0/jer,但我现在不知道如何设置它。我发现了以下Maven依赖项: 我需要什么Java代码才能在灰熊上运行泽西岛?