我在 eclipse 中创建了示例项目并将其部署在 tomcat 中。
我正在使用下面的 jar 文件。
asm-3.1.jar
jersey-core-1.10.jar
jersey-server-1.10.jar
jersey-servlet-1.10.jar
以下是课程。
package example;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("helloworld")
public class HelloWorldResource {
@GET
@Produces("text/plain")
public String getHello() {
return "Hello World!";
}
}
和
package example;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/")
public class MyApplication extends Application {
// @Override
// public Set<Class<?>> getClasses() {
// final Set<Class<?>> classes = new HashSet<Class<?>>();
// // register root resource
// classes.add(HelloWorldResource.class);
// return classes;
// }
}
我的 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<display-name>JXRSHelloWorld</display-name>
<servlet>
<servlet-name>jersey</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
我的疑惑
Jersey 框架如何注入/扫描 JAX-RS 资源。如果我们没有明确提供类名
一些文档说(下面提供了链接),我们必须显式注册包名称以告诉 Jersey 框架,以便它可以扫描这些包并注入 AX-RS 资源。
链接 1:https ://jersey.java.net/documentation/latest/deployment.html#deployment.servlet.2
链接 2:http ://docs.oracle.com/cd/E19776-01/820-4867/ggnxs/index.html
即使我从 MyApplication 类中删除方法 getClasses(),它也可以正常工作。我的疑问是它如何找到资源 HelloWorldResource.java ?
这是我的 Tomcat 的 catalina.out 日志文件的快照:
Feb 6, 2014 7:48:38 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
class example.HelloWorldResource
在上面的代码中,我没有明确告诉框架注册我的类 HelloWorldResource,因为我已经评论了 getClasses 方法。它是否通过 @Path("helloworld") @Produces("text/plain") 之类的注释进行扫描?
谢谢,
尼拉吉