- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我真的很困惑。我已经尝试使用带有 tomcat 的 Jax-rs 并使用所有注释,我能够使用 url
调用我的服务。因此,如果没有 Jax-rs,我可以简单地拥有一个 servlet 并调用我的服务。同样,正如我所尝试的那样,有带有 Jersey 的 jax-rs(因为我研究了它的 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>
然后我有与 JAX-RS 相同的注释,在 GET 上我可以使用正确的 URL 调用我的服务。
我的问题是,为什么 Jersey 使用 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
)。 JAX-RS 也是围绕 Servlet 构建的(主要 Servlet 是特定于实现的;在 Jersey 的情况下,它是 ServletContainer
)。
请求进入 Tomcat,它查找 servlet 映射,它发现 ServletContainer
与请求 URL 匹配,它将请求包装在 HttpServletRequest
中并将其发送到 Jersey Servlet。现在 Jersey 可以随心所欲地处理它,这是一大堆处理;例如处理请求以匹配您的方法[2]、反序列化实体主体,以及一大堆其他使所有魔法成为可能的东西。完成处理后,它将响应发送回容器。
why jersey using a servlet?
我认为上面已经说得很清楚了。
JAX-RS not using a servlet?
不太确定我是否真的理解您的要求,但 JAX-RS 指定了其他部署模型,但 Servlet 环境是唯一具有任何特定要求详细信息的环境。其他部署选项(例如在 SE 环境中)将特定于实现[1]。
Why using JAX-RS, while we can use a just Servlet
您基本上是在问,“当我可以实现自己的 REST 框架时,我为什么要使用 JAX-RS?”。通常,当有可用的框架时,就使用它。如果您觉得自己可以做得更好,那就去做吧。
[1] - 参见 2.3 Publication
[2] - 请参阅 3.7 Matching Requests to Resource Methods
因此,部分 OP 的部分困惑是,他正在学习的教程没有在 web.xml 文件中指定 Servlet,这让 OP 认为“vanilla JAX-RS” (不存在)正在被使用,而不是实现。
JAX-RS 只是一个规范,没有实现就无法运行。是的,有一个 javax.ws.rx-api.jar
或一个 javaee-api.jar
具有要编译 一个 JAX-RS 应用程序,但此 jar 中没有实际的“引擎”。实际的 JAX-RS“引擎”在特定的实现 jar 中。
我没有看过完整的教程,但我假设它使用了上述 jar 之一,这导致 OP 认为没有使用 JAX-RS 实现。但实际上,使用的 Java EE 服务器(即 Glassfish)在内部具有实现。对于 Glassfish,它是 Jersey。
另一个混淆点可能出现在应用程序配置中。不像在 OP 的帖子中那样使用 web.xml,而是使用了一个 Application
子类。有点像
@ApplicationPath("/rest")
public class AppConfig extends Application {
...
}
JAX-RS 规范指出,当带有注解的此类可用时,应使用上述完全限定的类名作为 Servlet 名称创建一个 Servlet,并且 url 映射为 @ApplicationPath 中的值
。因此,无论您使用什么实现,这种行为都应该是相同的。
关于java - 与 JAX-RS 混淆,Jersey 与 JAX-RS 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29149650/
我真的很困惑。我已经尝试使用带有 tomcat 的 Jax-rs 并使用所有注释,我能够使用 url 调用我的服务。因此,如果没有 Jax-rs,我可以简单地拥有一个 servlet 并调用我的服务。
是否有任何工具/商业混淆器可以混淆 WPF 控件中的 BAML 资源? 如果没有,就 IP 保护而言,这是一段艰难的时期,因为黑客可以通过使用 BAML 到 XAML 转换器轻松查看 BAML 资源。
嘿大家。我在尝试使用 COBOL 在 zOS 环境中解决的编码项目中遇到了一些麻烦。我需要读入一个文件并将它们放入索引表中(我知道将少于 90 条记录)。 让我感到困扰的是,我们受到项目参数的约束,以
我试图按照这个例子来理解 join() 方法: class PrintDemo { public void printCount() { try { for(int
当我编译我正在编写的代码,然后在 JD Gui 中查看时,方法显示带有如下标题: public void growSurface(Random paramRandom, int paramInt1,
我正在为重新分发准备 Android 库,它的代码必须进行混淆处理。我已经阅读了有关此主题的一些内容,并且决定使用 Android Library Project。它将作为 jar 分发(自动在/bi
两个混淆相关的问题: 1) 是否有任何工具可以将 F# 从 MSIL 目标形式反汇编回其源形式或接近它的形式?这不是通过默默无闻来实现安全性的尝试,但我想保护某些源代码免遭“盗窃”。 2) 我简要地查
谁能向我解释为什么 simulatedCase <- rbinom(100,1,0.5) simDf <- data.frame(CASE = simulatedCase) posterior_m0
我一直无法找到关于使用 AppDomains 时发生的事情的非常清楚的描述,所以希望有人能够启发我。我有一个简单的测试程序(基本上是扯掉了 MSDN example ): using System;
假设我有 2 个分支topic和 master如果我在 topic分支,然后运行 git rebase master它是 rebase master 还是 rebase 主题分支? 做 git r
我有一个类(class): public class LockTest { public void LockThis() { lock (this)
我正在尝试最小化/混淆我的 Angular 代码,但遇到了问题。我在这里阅读“缩小说明”http://docs.angularjs.org/tutorial/step_05但我定义我的 Control
我遇到了一些困惑的操作。 var a = 0.1; var b = 0.2; var c = 0.3; console.log(a); // 0.1 console.log(b); // 0.2 co
感谢您查看我的帖子 - 我正在尝试弄清楚如何在单击链接时关闭此下拉菜单,但我的 JavaScript 技能非常缺乏,而且代码似乎很困惑。这是 HTML:
混淆、哈希和加密之间有什么区别? 这是我的理解: 哈希是一种单向算法;无法逆转 混淆与加密类似,但不需要任何“ secret ”即可理解(ROT13 就是一个例子) 加密是可逆的,但需要“ secre
我有以下代码 my $content = $response->content; $content =~ /username=([\s\S]+?)&/; my $username = $1; prin
我在 .NET 中发现了一些与我预期的有点不同的东西。我粘贴的代码没有意义,但它是我拥有的一个复杂得多的函数的浓缩版。我实际上是在获取匿名类型信息作为参数(尚未创建匿名类型的实例),我需要创建该类型的
我正在努力解决 JavaFX 应用程序的混淆问题。使用此项目作为基础: https://github.com/openjfx/samples/tree/master/IDE/IntelliJ/Non-
是否可以制作一个与此类似的 CSV 阅读器 while((line = reader.readLine()) != null){ String[] values = line.
公共(public)类测试2 { 公共(public)静态无效主(字符串[]参数){ System.out.println("3 + 6"); System.out.println(3
我是一名优秀的程序员,十分优秀!