Java EE Servlet和REST路径冲突



我正在尝试编写一个Java web应用程序,提供HTML和REST接口。我想创建一个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 ?

谢谢你,卢卡斯Jendele

这对我来说似乎很好。我做了什么:

  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");
    }
}
对于JAX-RS,我有这两个类:
@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。结果如预期。(也许我的例子太简单了?)

最新更新