1

我在 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>  

我的疑惑

  1. Jersey 框架如何注入/扫描 JAX-RS 资源。如果我们没有明确提供类名

  2. 一些文档说(下面提供了链接),我们必须显式注册包名称以告诉 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") 之类的注释进行扫描?

谢谢,

尼拉吉

4

0 回答 0