相关疑难解决方法(0)

如何仅使用注释设置JAX-RS应用程序(没有web.xml)?

是否可以仅使用注释设置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)

问题

  1. 为什么web.xml定义有效,但注释没有?有什么不同?

  2. 有没有办法使它工作,例如有一个没有web.xml的JAX-RS应用程序?

java jax-rs java-ee servlet-3.0

76
推荐指数
4
解决办法
11万
查看次数

如何部署JAX-RS应用程序?

JAX-RS 1.1规范在第6页说:

如果没有Application子类,则添加的servlet必须命名为:

javax.ws.rs.core.Application
Run Code Online (Sandbox Code Playgroud)

添加的servlet是什么?它可能是一个任意的servlet吗?

如果存在Application子类,并且已经定义了一个servlet具有名为的servlet初始化参数:

javax.ws.rs.Application
Run Code Online (Sandbox Code Playgroud)

再说一次,这里的"servlet"是什么?

如果存在未由现有servlet处理的Application子类,则ContainerInitializer添加的servlet必须使用Application子类的完全限定名称命名.

"由ContainerInitializer添加的servlet"是否意味着自动添加servlet?配置如何?

目前我既不使用Application类也不使用web.xml,它可以使用(使用GlassFish 3.1).这种部署机制是否需要完整的类路径扫描,这对于大型库来说可能会很慢?

如何在Servlet容器上部署?

Web中存在令人困惑的配置选项.在web.xml中使用context params查看此示例(对我来说不起作用!).部署JAX-RS应用程序的首选方法是什么?

java deployment servlets jax-rs

33
推荐指数
2
解决办法
6万
查看次数

如何在没有 web.xml 的情况下实现 jaxrs 应用程序

我试图在没有 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)

java rest jax-rs jersey

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×3

jax-rs ×3

deployment ×1

java-ee ×1

jersey ×1

rest ×1

servlet-3.0 ×1

servlets ×1