【问题标题】:Java EE Servlet and REST path clashingJava EE Servlet 和 REST 路径冲突
【发布时间】:2017-03-07 01:40:57
【问题描述】:

我正在尝试编写一个同时提供 HTML 和 REST 接口的 Java Web 应用程序。我想创建一个 servlet,它可以使用 JSP 提供 HTML 界面,但也应该可以通过 REST 访问数据。

对于 REST,我已经拥有类似的东西:

@javax.ws.rs.Path("/api/")
public class RestAPI {

   ... // Some methods
}

@WebServlet("/servlet") 
public class MyServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.getWriter().write("Howdy at ");
    }
}

现在,当我将 @WebServlet("/servlet") 注释更改为 @WebServlet("/") 时,servlet 可能由于与 REST 的路径冲突而停止工作。

如何在根目录中提供特定路径和 HTML 的 REST?

谢谢你, 卢卡斯·詹德勒

【问题讨论】:

  • 顺便说一句,应该可以通过 JAX-RS 提供 HTML 接口。事实上,甚至应该可以在与 API 完全相同的 URL 上提供 HTML 接口——我没有用 Swarm 尝试过,但我已经看到它用 Jetty + Jersey 完成了,所以我看不到为什么它也不能与 Swarm 一起使用。

标签: rest jsp servlets jakarta-ee wildfly-swarm


【解决方案1】:

这对我来说似乎没问题。我做了什么:

  1. 在我的pom.xml 中,我依赖于org.wildfly.swarm:undertow(用于Servlet API)和org.wildfly.swarm:jaxrs(用于JAX-RS)。当然还有 Swarm Maven 插件。

  2. 对于 servlet,我只有这一类:

@WebServlet("/")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println("Hello from servlet");
    }
}
  1. 对于 JAX-RS,我有这 2 个类:
@ApplicationPath("/api")
public class RestApplication extends Application {
}
@Path("/")
public class HelloResource {
    @GET
    public Response get() {
        return Response.ok().entity("Hello from API").build();
    }
}

为了测试,我运行curl http://localhost:8080/curl http://localhost:8080/api。结果符合预期。 (也许我的例子太简单了?)

【讨论】:

  • 谢谢!我完全尝试了您发布的内容,唯一的区别是我使用的是 gradle 而不是 maven。它不起作用。我在问题中包含了 gradle 和 main 文件,所以你可以看看。
  • 非常感谢。问题是我错过了 RestApplication 类。您发布的示例效果很好。是否可以在一个类中指定多个 GET 方法并为方法指定 @@Path 而不是为类指定?我试图将 Path 注释移动到该方法,但是,这对我不起作用。
  • 我最终想通了。必须为类和方法设置路径注释。
  • 你能发布你的 pom.xml 文件吗?我试图从 Gradle 迁移到 Maven 并且遇到了一些困难。谢谢。
  • 我这里有几个“游乐场”Swarm 项目:github.com/ladicek/swarm-tinies 他们所有的 pom.xml 文件看起来几乎一样。
猜你喜欢
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 2012-01-01
  • 2013-08-01
  • 2021-03-09
相关资源
最近更新 更多