当前位置: 首页 > 知识库问答 >
问题:

Tomcat RESTful Web服务部署

海宁
2023-03-14

我正在编写一个简单的RESTful Web服务,使用Java、tomcat7、jersey和IDE eclipse。

当我使用eclipse(服务器)启动web服务时,它运行良好。我测试了GET和POST方法。但当我在WAR文件中导出应用程序并使用tomcat manage UI部署时。它返回404 not found状态。

下面是一个例子:

@Path("/webservice")
public class WebService {

    @POST
    @Path("/post")
    @Produces(MediaType.APPLICATION_JSON)
    public Response helloWorld(String inputJson) {
        return Response.ok().entity("Hello World").build();
    }

    @GET  
    @Path("/{param}")  
    public Response getMessage(@PathParam("param") String message) {  
        String output = "Jersey say Hello World!!! : " + message;  
        return Response.status(200).entity(output).build();  
    }
}

这里是网络。xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>WebService</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>package.webservice</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>jersey-servlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

有人能解释在eclipse中启动服务和在localhost(或远程主机)中部署服务有什么区别吗?我怎样才能调试或得到一些关于这个的痕迹?

共有3个答案

陈宜修
2023-03-14

使用泽西运行REST Api的web.xml设置在下面的URL中得到最好的解释。

http://www.vogella.com/tutorials/REST/article.html#jerseyprojectsetup_gradle

我正在开发REST Api,下面是web.xml设置。

<servlet>
    <servlet-name>BOARDWALK REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <!-- Register resources and providers under com.vogella.jersey.first package. -->
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>io.swagger.api</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>BOARDWALK REST Service</servlet-name>
    <url-pattern>/bae/*</url-pattern>
</servlet-mapping>

所有REST API服务类都存储在class/io/swagger/api文件夹下。当我调用REST api时,我使用下面的URL,它可以工作。

http://localhost:8080/bae4_3_release/bae/bcpInstance

其中http://localhost:8080/bae4_3_release是上下文。 /bae/bcpInstance指向类/io/swagger/api/BcpInstanceApi.class中的一个类,其中PATH定义为@bcpInstance。

    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>io.swagger.api</param-value>
    </init-param>

表示REST API部署的位置。

宇文峰
2023-03-14

我终于成功了。我在eclipse项目的属性中设置了上下文根。可访问的URL类似于:localhost:8080/context root/rest/。。。但当我在Tomcat中使用WAR文件部署时,并没有考虑这种配置。正确的URL仍然是:localhost:8080/project/rest/。。。

我必须找到如何在web.xml或其他地方设置上下文根。

斜瑞
2023-03-14

有两个建议可以让你摆脱这个问题1)在你的资源文件中建立一个默认方法,这样如果没有url匹配,它就会调用,否则它可能会给出404

@GET
@Produces({ MediaType.TEXT_HTML, MediaType.TEXT_PLAIN })
public String default() {
    return "Hello Rest Api";
}

你可以看到-

2)在下面的web.xml设置默认的rest api路径

<servlet-mapping>
    <servlet-name>Jersey</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

你可以看到-

所以当你调用你的api时-

 类似资料:
  • 部署服务 我们使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点运行。 新建服务 现在我们在上一节创建的 Swarm 集群中运行一个名为 nginx 服务。 $ docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine 现在我们使用浏览器,输入任意节点 IP

  • 服务端部署 1. 源码部署 CAT安装环境 Linux 2.6以及之上(2.6内核才可以支持epoll),线上服务端部署请使用Linux环境,Mac以及Windows环境可以作为开发环境,美团点评内部CentOS 6.5 Java 6,7,8,服务端推荐使用jdk7的版本,客户端jdk6、7、8都支持 Maven 3及以上 MySQL 5.6,5.7,更高版本MySQL都不建议使用,不清楚兼容性

  • 部署模式 SOFARegistry 支持两种部署模式,分别是集成部署模式及独立部署模式,本文将介绍最简单的单节点集成部署模式,更多更详细的部署模式介绍可以查看 部署文档。 部署步骤 1. 下载源码或者安装包 下载源码方式 git clone https://github.com/sofastack/sofa-registry.git cd sofa-registry mvn clean packa

  • 关于aiohttp服务器部署,这里有以下几种选择: 独立的服务器。 使用nginx, HAProxy等反向代理服务器,之后是后端服务器。 在反向代理之后在部署一层gunicorn,然后才是后端服务器。 独立服务器 只需要调用aiohttp.web.run_app(),并传递aiohttp.web.Application实例即可。 该方法最简单,也是在比较小的程序中最好的解决方法。但该方法并不能完全

  • 我正在尝试在库伯内特斯集群的pod中部署DHCP服务器。我创建了以下资源: $cat dhcpd部署。亚马尔 创建dhcpd-deployment.yaml $catdhcpd-service.yaml $kubectl create-f dhcpd服务。亚马尔 pod和服务的所有内容都已成功创建,但不幸的是,DHCPD pod在UDP端口67上没有接收任何数据包。 我错过什么了吗?

  • 部署 PHP 应用程序到生产环境中有多种方式。 Platform as a Service (PaaS) PaaS 提供了运行 PHP 应用程序所必须的系统环境和网络架构。这就意味着只需做少量配置就可以运行 PHP 应用程序或者 PHP 框架。 现在,PaaS 已经成为一种部署、托管和扩展各种规模的 PHP 应用程序的流行方式。你可以在 资源部分 查看 PHP PaaS “Platform as

  • 外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”->“外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。右击外部服务器对象列表的任意位置并选择“安装 postgres_fdw 扩展”。 外部服务器设计器 “外部服务器设计

  • 外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”-> “外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。按住 Control 键并点按外部服务器对象列表的任意位置,然后选择“安装 postgres_fdw 扩展”。 外