maven - Servlet 在部署到 Tomcat 时无法工作,尽管它在 IntelliJ IDEA 中工作
问题描述
从 IntelliJ IDEA 运行时,两个简单POST
的GET
URL 和localhost:8080/mdht-restlet都可以正常工作。另外,mdht-restlet.war放入/opt/tomcat/webapp部署,在 Tomcat 应用程序管理器中显示为正在运行,在catalina.out中没有错误或警告。GET 和 POST 都产生 404。无论我是从命令行生成 WAR 文件mvn package
,还是从 IDEA生成 WAR 文件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>
pom.xml为 WAR 构建插件:
<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.";
}
}
解决方案
答案是 Tomcat 将 WAR 文件的名称(在本例中为mdht-restlet.war)视为根(除非您将 WAR 文件重命名为ROOT.war Tomcat 部署到ROOT),因此 URL是从http://localhost:8080/mdht-restlet 开始。除此之外,servlet Java 代码使用@PATH
类级别的注释来添加到 URL。这将其扩充为http://localhost:8080/mdht-restlet/mdht-restlet,因此较短的 URL 永远不会做 404 之外的事情。
为什么 IntelliJ IDEA 会得到这个?可能是因为选项卡(对于 Tomcat)和选项卡Run/Debug Configuration
中的设置之间的设置方式。这些并没有遵循(我在第一段中提出的观点),因此给人一种成功的错误印象(因为它们被劫持了)。Server
Deployment
推荐阅读
- javascript - Webpack 初始化失败
- azure - SharePoint 的 Azure 应用注册权限范围
- angular-material - 如何将 Angular Material 原色设置为自定义值?
- session - woocommerce购物车会话复制
- wordpress - 安装时创建数据库表并插入不起作用 - wordpress 插件
- docker - 如何在 docker-compose 文件中链接 rabbitMq 容器?
- python - 如何检查具有特定属性的类的实例是否存在
- c# - Entity Framework Core 2.1 - 保存一对多相关记录时出错
- java - 如何在android中设置开始日期和结束日期
- c# - ASP.Net Core Razor 组件:await vs .Result