1

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

我的网络应用程序

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

  • http://myWebApp.azurewebsites.net/myWebApp部署在 Azure Tomcat
  • http://localhost:8080/myWebApp部署在本地 Tomcat

密钥文件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>

我的网络服务

好吧,当我想以同样的方式部署一个简单的 Web 服务并查看其内容时,问题就来了。

我决定使用jersey图书馆。这是唯一的示例类:

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

clean installURL 上的本地 Tomcat 服务器上运行之后http://localhost:8080/myWebService/Sample,它正确地为我提供了 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上使用时,它要么在 localhost 上不起作用。感谢帮助。如果需要,请随时询问更多信息(希望使问题尽可能简短)。

4

1 回答 1

1

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

  1. 在类Sample中,类注解@Path("Sample")和method注解表示项目中类的方法的可@Path("/")访问Methodurl是。MethodSamplemyWebServicehttp://myWebService.azurewebsites.net/myWebService/Sample/
  2. url-pattern/表示仅匹配 url http://myWebService.azurewebsites.net/myWebService/

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

  1. 推荐的。使用通配符/*代替/forurl-pattern并访问 url http://myWebService.azurewebsites.net/myWebService/Sample/。并建议将类注释@Path("Sample")更改@Path("/Sample")为阅读和理解。

  2. 仅将类注释更改@Path("Sample")@Path("")or @Path("/")if not change url-pattern,但不会匹配其他类的任何路径注释。

于 2017-01-26T07:27:00.617 回答