在 Azure Tomcat 上部署 Java Web 应用程序和 Web 服务的区别

Difference in deploying Java web application and web service on Azure Tomcat

我在 Azure 的 Tomcat servlet 容器上部署时遇到了问题。我通过 FTP 连接到创建的网络应用程序 space,将 war 文件复制到正确的文件夹。

myWebApp

我已经在 Azure 上成功部署了一个 Spring MVC 简单 Web 应用程序。 URL 模式如下,两者均按预期工作:

密钥文件在下面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 库。这是唯一的示例 class:

@Path("Sample")  
public class Sample {
    @GET  
    @Path("/")  
    @Produces(MediaType.TEXT_XML)  
    public String Method() {
        return "<tag>" + 123 + "</tag>";  
    }
}

clean install 和 运行ning 在 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>

我错过了什么,我做错了什么?我注意到 url-pattern 中的两个 web.xml 文件之间的区别是:

当我在 myWebService 上使用 <url-pattern>/</url-pattern> 时,它要么在本地主机上不起作用。感谢帮助。如果需要,请随时询问更多信息(希望问题尽可能简短)。

根据您的描述和代码,我尝试成功重现您的 myWebService 问题。 404 访问 http://myWebService.azurewebsites.net/myWebService of myWebService 的问题是由于 url-pattern 不匹配 class Method url Sample,请看下面的解释。

  1. 在classSample中,class注解@Path("Sample")和方法注解@Path("/")为方法Method表示可访问url 对于 myWebService 项目中 class Sample 的方法 Methodhttp://myWebService.azurewebsites.net/myWebService/Sample/.
  2. url-pattern/表示只匹配urlhttp://myWebService.azurewebsites.net/myWebService/.

您的情况有两种解决方案。

  1. 推荐。使用通配符 /* 而不是 / 作为 url-pattern 并访问 url http://myWebService.azurewebsites.net/myWebService/Sample/。并建议将class注解@Path("Sample")改为@Path("/Sample")以便阅读和理解。

  2. 只把class注解@Path("Sample")改成@Path("")或者@Path("/")不改url-pattern,但是任何路径注解其他 classes 将不会被匹配。