服务器如何将 URI 模式绑定到特定的 Java class?
How does server binding URI pattern to a particular Java class?
下面我休息class
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
@Path("/users")
public class UserRestService {
@GET
public Response getUser() {
return Response.status(200).entity("getUser is called").build();
}
}
我不知道服务器如何映射此 /users uri 模式与此 UserRestService.java file.Do 我们需要在 Web 配置中配置...?
我的问题: 当 /users URI 模式匹配时,它是如何调用 UserRestService.java 的?
提前致谢...
有一个 class javax.ws.rs.core.Application;
您需要对其进行扩展(至少我这样做了)以便注册您的 JaxRs 资源 URI 并提供web.xml 中的相应信息,例如:-
public class ExtendedClass extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(UserRestService.class);
return classes;
}
}
在web.xml中:-
<servlet>
<description>
JAX-RS Tools Generated - Do not modify</description>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>package.name.ExtendedClass</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>
/</url-pattern>
</servlet-mapping>
因为您的 jax-ws servlet 已设置为响应您应用程序中的特定 url,就像下面的
<servlet>
<servlet-name>jaxws-servlet</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSSpringServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jaxws-servlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
在基于 REST
的架构中,一切都是资源。通过基于 HTTP 标准方法的通用接口访问资源 (e.g., POST, GET, PUT or DELETE)
。它是 org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
servlet class 在您的 Web 应用程序 web.xml
中提到的,它征用了所有 JAX-RS
根资源和提供程序。
并且使用 /*
url 模式,所有资源都将传递给 RESTeasy
servlet。
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
你会想知道 RESTeasy
是如何知道我的 class 用 @Path
注释的,所以还有另一种配置让 RESTeasy
知道你的资源你必须在 web.xml
中提到
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
因此,当请求来自 /users
时,org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
serrvlet 会识别资源 class 或 class 方法将为请求提供服务并调用它的 URI 路径,即UserRestService
你的情况。
希望对您有所帮助:)
下面我休息class
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
@Path("/users")
public class UserRestService {
@GET
public Response getUser() {
return Response.status(200).entity("getUser is called").build();
}
}
我不知道服务器如何映射此 /users uri 模式与此 UserRestService.java file.Do 我们需要在 Web 配置中配置...?
我的问题: 当 /users URI 模式匹配时,它是如何调用 UserRestService.java 的?
提前致谢...
有一个 class javax.ws.rs.core.Application;
您需要对其进行扩展(至少我这样做了)以便注册您的 JaxRs 资源 URI 并提供web.xml 中的相应信息,例如:-
public class ExtendedClass extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(UserRestService.class);
return classes;
}
}
在web.xml中:-
<servlet>
<description>
JAX-RS Tools Generated - Do not modify</description>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>package.name.ExtendedClass</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>
/</url-pattern>
</servlet-mapping>
因为您的 jax-ws servlet 已设置为响应您应用程序中的特定 url,就像下面的
<servlet>
<servlet-name>jaxws-servlet</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSSpringServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jaxws-servlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
在基于 REST
的架构中,一切都是资源。通过基于 HTTP 标准方法的通用接口访问资源 (e.g., POST, GET, PUT or DELETE)
。它是 org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
servlet class 在您的 Web 应用程序 web.xml
中提到的,它征用了所有 JAX-RS
根资源和提供程序。
并且使用 /*
url 模式,所有资源都将传递给 RESTeasy
servlet。
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
你会想知道 RESTeasy
是如何知道我的 class 用 @Path
注释的,所以还有另一种配置让 RESTeasy
知道你的资源你必须在 web.xml
中提到
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
因此,当请求来自 /users
时,org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
serrvlet 会识别资源 class 或 class 方法将为请求提供服务并调用它的 URI 路径,即UserRestService
你的情况。
希望对您有所帮助:)