我在 Azure 的 Tomcat servlet 容器上部署时遇到问题。我使用 FTP 连接到创建的 Web 应用程序空间,复制 war
文件复制到正确的文件夹。
myWebApp
我已在 Azure 上成功部署了 Spring MVC 简单 Web 应用程序。 URL 模式如下,两者均按预期工作:
-
http://myWebApp.azurewebsites.net/myWebApp
部署在 Azure Tomcat 上 -
http://localhost:8080/myWebApp
部署在本地Tomcat
key 文件是web.xml
如下:
<web-app ... xsd schemas ... >
<display-name>myWebApp</display-name>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>... not important ...</context-param>
<listener>... not important ...</listener>
</web-app>
<小时/>
myWebService
好吧,当我想以相同的方式部署一个简单的 Web 服务并查看其内容时,问题就出现了。
我决定使用jersey
图书馆。这是唯一的示例类:
@Path("Sample")
public class Sample {
@GET
@Path("/")
@Produces(MediaType.TEXT_XML)
public String Method() {
return "<tag>" + 123 + "</tag>";
}
}
clean install
之后并在 URL http://localhost:8080/myWebService/Sample
上的本地 Tomcat 服务器上运行,它正确地给了我 XML <tag>123</tag>"
.
我希望以与之前的 myWebApp 相同的方式部署在 Azure 上,并尝试在 URL http://myWebService.azurewebsites.net/myWebService
上运行。 。它给了我 404
相反,出现错误,指出请求的资源不可用。
这是 web.xml
当然:
<web-app ... xsd schemas ... >
<display-name>myWebService</display-name>
<servlet>
<servlet-name>Jersey REST Service</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>nch.webservices</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
<小时/>
我错过了什么并且我做错了什么?我注意到两者之间的区别 web.xml
文件位于 url-pattern
那:
- myWebApp 使用
/
- myWebService 使用
/*
当我使用<url-pattern>/</url-pattern>
时在 myWebService 上,则它无法在本地主机上运行。感谢帮助。如果需要,请随时询问更多信息(希望问题尽可能简短)。
最佳答案
根据您的描述和代码,我尝试成功重现您的myWebService
问题。访问myWebService
的http://myWebService.azurewebsites.net/myWebService
问题404
是由url-pattern<引起的
与 Sample
类的 Method
url 不匹配,请参阅下面的说明。
- 在类
Sample
中,类注解@Path("Sample")
和方法注解@Path("/")
for methodMethod
表示myWebService
项目中类Sample
的方法Method
的可访问 url 为http://myWebService.azurewebsites.net/myWebService/Sample/
。 url-pattern
值/
表示仅匹配 urlhttp://myWebService.azurewebsites.net/myWebService/
。<
针对您的情况有两种解决方案。
推荐。使用通配符
/*
而不是/
作为url-pattern
并访问 urlhttp://myWebService.azurewebsites.net/myWebService/Sample/
.并建议将类注释@Path("Sample")
更改为@Path("/Sample")
以方便阅读和理解。仅将类注释
@Path("Sample")
更改为@Path("")
或@Path("/")
如果不更改url-pattern
,则其他类的任何路径注释都不会匹配。
关于java - 在 Azure Tomcat 上部署 Java Web 应用程序和 Web 服务的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41860440/