我正在使用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.出于调试目的,我为listing
servlet启用了default
属性。我发现我只能使用
welcome_de.html
http://productive:8080/MyApplication/static/static/welcome_de.html
。如果我在这里使用与测试相同的链接,我将获得我的webapplication的内容。
不知何故,文件夹static
似乎嵌套了一个级别。
有什么想法吗?为什么两台机器的行为不同 - 而版本没有重大区别?
不幸的是,将生产服务器升级到版本6.0.32不是一种选择。
答案 0 :(得分:1)
这真是只是猜测,所以请不要因此而责备我。
当我尝试使用eclipse和Tomcat加载不同类型的文件时,我经历了类似的事情。在本地日食Tomcat上它运行得很好,而在真正的应用程序服务器上却没有。
最后,至少对我来说,原因是我在内部加载文件的方式。
我发现当我使用getResourceAsStream(“工作空间中的项目路径”)方法时,我的问题不再发生,例如, (我的应用程序中的代码片段,我也使用OpenNLP)
try (InputStream modelIn = getClass().getResourceAsStream(
"/documentProcessor/algorithms/pos-maxent.bin")) {
...
}
“documentProcessor”,“algorithms”等只是我工作区中项目的外部文件的文件路径,我希望将其包含在我的Web应用程序中。
我不知道你如何将* .html文件包含到你的vaadin应用程序中,但是如果你以某种方式加载它们,那么尝试它是值得的。
答案 1 :(得分:1)
嗯 - 我用不同的方式解决了它。我让Vaadin为文件提供服务,然后使用Filepath读取它。它似乎有效,尽管可能有更好的解决方案。