Java EE Servlet 和 REST 路径冲突
Java EE Servlet and REST path clashing
我正在尝试编写一个同时提供 HTML 和 REST 接口的 Java Web 应用程序。我想创建一个使用 JSP 提供 HTML 接口的 servlet,但数据也应该可以通过 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 冲突。
如何在特定路径上提供 REST 并在根目录中 HTML?
谢谢,
卢卡斯詹德勒
这对我来说似乎没问题。我做了什么:
在我的 pom.xml
中,我依赖于 org.wildfly.swarm:undertow
(对于 Servlet API)和 org.wildfly.swarm:jaxrs
(对于 JAX-RS)。当然还有 Swarm Maven 插件。
对于servlet,我只有这个class:
@WebServlet("/")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("Hello from servlet");
}
}
- 对于 JAX-RS,我有这两个 classes:
@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
。结果如预期。 (也许我的例子太简单了?)
我正在尝试编写一个同时提供 HTML 和 REST 接口的 Java Web 应用程序。我想创建一个使用 JSP 提供 HTML 接口的 servlet,但数据也应该可以通过 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 冲突。
如何在特定路径上提供 REST 并在根目录中 HTML?
谢谢, 卢卡斯詹德勒
这对我来说似乎没问题。我做了什么:
在我的
pom.xml
中,我依赖于org.wildfly.swarm:undertow
(对于 Servlet API)和org.wildfly.swarm:jaxrs
(对于 JAX-RS)。当然还有 Swarm Maven 插件。对于servlet,我只有这个class:
@WebServlet("/")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("Hello from servlet");
}
}
- 对于 JAX-RS,我有这两个 classes:
@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
。结果如预期。 (也许我的例子太简单了?)