是否可以仅使用注释设置JAX-RS应用程序?(使用Servlet 3.0和JAX-RS Jersey 1.1.0)
我试过,没有运气.web.xml似乎需要使用一些.
配置A(工作,但具有web.xml配置)
web.xml中
...
<servlet>
<servlet-name>org.foo.rest.MyApplication</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>org.foo.rest.MyApplication</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
...
Run Code Online (Sandbox Code Playgroud)
Java的
@ApplicationPath("/")
public class MyApplication extends Application {
...
}
Run Code Online (Sandbox Code Playgroud)
配置B(不工作,抛出异常)
@ApplicationPath("/")
@WebServlet("/*") // <--
public class MyApplication extends Application {
...
}
Run Code Online (Sandbox Code Playgroud)
后者似乎坚持认为Application将是Servlet的子类(例外不会留下任何猜测)
java.lang.ClassCastException: org.foo.rest.MyApplication cannot be cast to javax.servlet.Servlet
Run Code Online (Sandbox Code Playgroud)
问题
为什么web.xml定义有效,但注释没有?有什么不同?
有没有办法使它工作,例如有一个没有web.xml的JAX-RS应用程序?
JAX-RS 1.1规范在第6页说:
如果没有Application子类,则添加的servlet必须命名为:
Run Code Online (Sandbox Code Playgroud)javax.ws.rs.core.Application
添加的servlet是什么?它可能是一个任意的servlet吗?
如果存在Application子类,并且已经定义了一个servlet具有名为的servlet初始化参数:
Run Code Online (Sandbox Code Playgroud)javax.ws.rs.Application
再说一次,这里的"servlet"是什么?
如果存在未由现有servlet处理的Application子类,则ContainerInitializer添加的servlet必须使用Application子类的完全限定名称命名.
"由ContainerInitializer添加的servlet"是否意味着自动添加servlet?配置如何?
目前我既不使用Application类也不使用web.xml,它可以使用(使用GlassFish 3.1).这种部署机制是否需要完整的类路径扫描,这对于大型库来说可能会很慢?
如何在Servlet容器上部署?
Web中存在令人困惑的配置选项.在web.xml中使用context params查看此示例(对我来说不起作用!).部署JAX-RS应用程序的首选方法是什么?
我试图在没有 web.xml 配置的情况下部署一个非常简单的 jaxrs 应用程序,但无法使其工作。我希望访问的 URL 是 serverandport/{appname}/rest/welcomes/hello,我想我一定遗漏了一些显而易见的东西。
应用
@ApplicationPath("/rest")
public class EngineApp extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> s = new HashSet<Class<?>>();
s.add(RestTestImpl.class);
return s;
}
}
Run Code Online (Sandbox Code Playgroud)
资源
@Path("/welcomes")
public class RestTestImpl {
@GET
@Path("hello")
public String sayPlainHello() {
return "Hi from Rest";
}
}
Run Code Online (Sandbox Code Playgroud)
POM 片段
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
Run Code Online (Sandbox Code Playgroud)
编辑:对于下面的响应,我尝试使用空的 web.xml 以及以下 web.xml。麻烦也返回 404,但是下面的 xml 声明“Servlet javax.ws.rs.core.Application 不可用”:
网页.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<load-on-startup>1</load-on-startup> …Run Code Online (Sandbox Code Playgroud)