【问题标题】:Why can't I call this simple web service?为什么我不能调用这个简单的 Web 服务?
【发布时间】:2018-11-30 01:57:56
【问题描述】:

我在 Eclipse 上创建了一个带有一个类的 Web 项目:“HelloWorld.java”,它应该有一个方法来回答 GET 请求。

package javaeetutorial.hello;

// imports

@Path("base")
public class HelloWorld extends HttpServlet {

    public HelloWorld() {
    }

    @GET
    @Produces("text/html")
    public String getHtml() {
        return "<html lang=\"en\"><body><h1>Hello, World!!</h1></body></html>";
    }
}

然后,在 WebContent 文件夹中,在 WEB-INF 目录中,我创建了一个包含以下内容的 web.xml 文件,以便将请求映射到 /hello url 到我的 servlet。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         metadata-complete="true"
         version="3.1">

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>javaeetutorial.hello.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
      <servlet-name>hello</servlet-name>
      <url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>

我将项目导出到 .war 文件,然后使用 Glassfish 部署它,但是当我调用应该调用我的 Web 服务的 URL 时,它显示“请求的资源 () 不可用”。

我调用的网址是:http://localhost:8080/Calculator/hello/base

为什么我的网络服务没有被调用?

【问题讨论】:

  • 您似乎将 servlet 与 JAX-RS 混淆了。 @Path@GET@Produces 等 JAX-RS 注释对常规 servlet 没有影响。 HttpServlet 的子类必须重写doGet 方法才能生效。如果您想走 JAX-RS 路线,请从 web.xml 中删除 servlet 配置并创建一个 JAX-RS javax.ws.rs.core.Application 类。详情请参阅JAX-RS specification

标签: java rest web-services jax-rs glassfish-2.x


【解决方案1】:

正如 VGR 在 cmets 中指出的那样,我将 JAX-RS 与 Servlet 混淆了。

我选择使用 servlet 路由。我删除了所有注释并将我的 getHTML 方法替换为对 HttpServlet 的 doGet 方法的覆盖。现在一切正常。

【讨论】:

    猜你喜欢
    • 2016-06-03
    • 2019-05-22
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    相关资源
    最近更新 更多