代码之家  ›  专栏  ›  技术社区  ›  Russ Bateman Basil Bourque

当部署到Tomcat时,Servlet无法工作,尽管它在IntelliJ IDEA中工作

  •  0
  • Russ Bateman Basil Bourque  · 技术社区  · 8 年前

    两简单 POST GET URL, 本地主机:8080/mdht restlet ,从intellij idea运行时两者都能完美工作。分别地, mdht-restlet.war公司 落入 /opt/tomcat/webapp 部署,在tomcat应用程序管理器中显示为正在运行,在 加泰罗尼亚 . 获取和发布都产生404。不管我是从命令行生成战争文件, mvn package ,或者从思想上, Build-> Build Artifacts... ,结果相同。

    如前所述,它在idea run/debug中工作得很好。我不知道该看什么。以下是一些相关细节:

    Web.XML 内容:

      <servlet>
        <servlet-name>mdht-restlet</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>com.windofkeltia.servlet</param-value>
        </init-param>    
      </servlet>
    
      <servlet-mapping>
        <servlet-name>mdht-restlet</servlet-name>
        <url-pattern>/*</url-pattern>
      </servlet-mapping>
    

    XML 为战争构建插件:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>${maven-war-plugin.version}</version>
        <configuration>
          <webResources>
            <resource>
              <!-- this is relative to the project parent directory -->
              <directory>web</directory>
            </resource>
          </webResources>
        </configuration>
      </plugin>
    

    mdhtrestlet.java :

    package com.windofkeltia.servlet;
    ...
    @Path( "/mdht-restlet" )
    public class MdhtRestlet
    {
      @POST
      @Consumes( MediaType.TEXT_PLAIN )
      @Produces( MediaType.TEXT_XML )
      public Response postPatientData( @Context HttpServletRequest request, @Context HttpHeaders header )
      {
        ...
      }
    
      @GET
      @Produces( MediaType.TEXT_PLAIN )
      public String getStatusInPlainText()
      {
        return "The MDHT restlet is up.";
      }
    }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Russ Bateman Basil Bourque    8 年前

    答案是tomcat会考虑war文件的名称,在本例中, mdht-restlet.war公司 ,作为根目录(除非将war文件重命名为 战争 Tomcat部署到 ,因此url以 http://localhost:8080/mdht-restlet . 此外,servlet Java代码使用 @PATH 要添加到URL的类级别的批注。使它增加到 http://localhost:8080/mdht-restlet/mdht-restlet ,因此较短的url除了404之外永远不会执行其他操作。

    为什么这是通过智能的想法?可能是因为 Run/Debug Configuration 是在 Server tab(用于tomcat)和 Deployment 标签。这些都没有遵循(我在第一段中提出的观点),因此给人一种错误的成功印象(因为他们是被欺骗的)。