我正在使用 Vaadin 框架,我的 web.xml 如下所示:
<servlet>
<servlet-name>myservletname</servlet-name>
<servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
<init-param>
<description>
Vaadin application class to start</description>
<param-name>application</param-name>
<param-value>MyApplication</param-value>
</init-param>
<init-param>
<description>
Application widgetset</description>
<param-name>widgetset</param-name>
<param-value>MyWidgetset</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>myservletname</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
此外,我的应用程序目录如下所示:
.
├── (various xml config files)
├── META-INF
│ └── ...
├── static
│ ├── styles.css
│ ├── welcome_de.html
│ └── welcome_fr.html
├── trustStore.jks
├── VAADIN
│ └── ...
└── WEB-INF
├── lib
│ └── (various libraries)
└── web.xml
我的目标是静态访问 welcome_de.html
和 welcome_fr.html
。
到目前为止,一切都很好。在我的测试机上,我直接从 eclipse(tomcat 版本 6.0.32)运行 Tomcat 实例,一切正常。我可以使用以下 URL 访问该文件:
http://localhost:8080/MyApplication/static/
如果我将 WAR 文件导出并部署到生产性 Tomcat 服务器,它的行为会有所不同。
在我的生产服务器(tomcat 版本 6.0.18)上访问同一文件时,出现错误 404。出于调试目的,我启用了 default
的 listing
属性> servlet。我发现我只能使用welcome_de.html
访问
http://productive:8080/MyApplication/static/static/welcome_de.html
。如果我使用与此处测试相同的链接,我将获得网络应用程序的内容。
不知何故,文件夹 static
似乎嵌套在其自身中一层。
有什么想法吗?为什么两台机器的行为不同 - 而没有主要版本差异?
不幸的是,无法将生产服务器升级到版本 6.0.32。
最佳答案
这确实只是一个猜测,所以请不要为此责怪我。
当我尝试使用 eclipse 和 Tomcat 加载不同类型的文件时,我遇到了类似的情况。在本地 eclipse Tomcat 上它运行得很好,而在真正的应用程序服务器上则不然。
最终的原因,至少对我来说,是我内部加载文件的方式。
我发现当我使用 getResourceAsStream(“工作空间中项目的路径”) 方法时,我的问题不再出现,例如(我的应用程序中的代码片段,我也使用 OpenNLP)
try (InputStream modelIn = getClass().getResourceAsStream(
"/documentProcessor/algorithms/pos-maxent.bin")) {
...
}
“documentProcessor”、“algorithms”等只是我的工作区中的项目的外部文件的文件路径,我希望将其包含在我的 Web 应用程序中。
我不知道如何将 *.html 文件包含到 vaadin 应用程序中,但如果您以某种方式加载它们,可能值得一试。
关于Tomcat 在不同的机器上表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229024/