(Java)App Engine中的静态文件无法访问

Jer*_*gan 13 java google-app-engine web.xml

例子的文件说,你只需要简单地把在战争中/(或子目录)的文件,它们应该是从主机访问的(只要它们不是JSP或在WEB-INF).例如,如果你将foo.css置于war /那么你应该可以在http:// localhost:8080/foo.css上访问它.但是,这对我来说根本不起作用.无法访问我的静态文件.

appengine-web.xml上的文档说你也可以特定地将某些类型表示为静态.我也试过这个并没有什么区别.

我错过了一些明显的东西吗

更新: 原来我的web.xml中的一个映射有点过于激进了.以下是罪魁祸首:

<servlet>
    <servlet-name>Main</servlet-name>
    <servlet-class>MainServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Main</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

它似乎抓住了所有未被抓住的其他规则之一,我不明白,因为url-pattern的末尾没有*.它似乎与文档直接相矛盾:

注意:静态文件,逐字提供给用户的文件(如图像,CSS或JavaScript)与部署描述符中提到的路径分开处理.无论部署描述符中的servlet和过滤器映射如何,对与路径中的文件路径匹配的URL路径的请求都将为该文件提供服务,该文件将被视为静态文件.您可以使用appengine-web.xml文件从被视为静态文件的文件中排除文件.

那么,我怎样才能有一个与我的域名基础相匹配的规则(例如http://www.example.com/)并且仍允许静态文件过滤?

zoc*_*man 11

尝试在appengine-web.xml中手动定义静态文件

<static-files>
  <include path="/favicon.ico" expiration="1d" />
  <include path="/static/**" />
  <include path="/**.css" />      
</static-files>
Run Code Online (Sandbox Code Playgroud)

即使像servlet这样,这对我也有用

<servlet-mapping>
 <servlet-name>testServlet</servlet-name>
 <url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

<servlet-mapping>
 <servlet-name>testServlet</servlet-name>
 <url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

请参阅静态文件和资源文件


jak*_*kob -2

当使用例如 tomcat 来提供静态文件时,必须指定如下模式:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

也许你也可以尝试做同样的事情?