java-如何通过Vaadin / Spring应用程序提供静态资源?
作者:互联网
我有带有弹簧安全集成的Vaadin Web应用程序,用于身份验证. Vaadin servlet的配置非常简单:
<servlet>
<servlet-name>Vaadin Application Servlet</servlet-name>
<servlet-class>com.example.SpringApplicationServlet</servlet-class>
<init-param>
<param-name>applicationBean</param-name>
<param-value>mainApplication</param-value>
</init-param>
<init-param>
<param-name>widgetset</param-name>
<param-value>com.example.widgetset.CustomWidgetSet</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Vaadin Application Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Servlet初始化Spring Context并返回Vaadin应用程序.我还为此配置了安全性,并配置了一个自定义登录表单,如下所示:
<servlet>
<servlet-name>login</servlet-name>
<jsp-file>/jsp/login.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>login_error</servlet-name>
<jsp-file>/jsp/loginError.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>login_error</servlet-name>
<url-pattern>/login_error</url-pattern>
</servlet-mapping>
登录表单使用外部CSS设置样式,并且还包含一些图像.基本上,图像位于/ jsp / img中,样式表位于/jsp/login.css中.因此,WAR结构如下所示:
> / jsp
> / META-INF
> / VAADIN
> / WEB-INF
图像和CSS都不会加载,因为显然所有这些请求都映射到vaadin servlet.我该如何定义一些静态资源目录,而Vaadin Servlet无法提供该目录?我已经尝试了春季mvc:resources,但是没有用.谢谢您的帮助.
再见
菲利普
我已经弄清楚了.虽然这是一种解决方法.我已经将Vaadin应用程序Servlet映射到/ app / *之类,而不是/ *(请记住,在这种情况下,您还必须将同一servlet映射到/ VAADIN / *).使用此配置,我可以从Web应用程序访问jsp目录,并且一切正常.我已经删除了整个Spring Resources配置,因为这没有用.
因此,再一次,我仍然不太满意此解决方案,而是希望以其他方式配置我的RESOURCES目录,但客户端很满意:).如果有人有正确的解决方案,我将不胜感激.
解决方法:
使用url重写过滤器可以获取有关URL映射的更多信息.
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后例如将Vaadin应用程序映射到/ vaadin并在urlrewrite.xml中配置url映射
<rule>
<from>/styles/**</from>
<to last="true">/styles/$1</to>
</rule>
<rule>
<from>/images/**</from>
<to last="true">/images/$1</to>
</rule>
<rule>
<from>/**</from>
<to>/vaadin/$1</to>
</rule>
<outbound-rule>
<from>/vaadin/**</from>
<to>/$1</to>
</outbound-rule>
编辑
另一种选择是将静态文件放在/ VAADIN /目录中.
标签:vaadin,spring,java,resources 来源: https://codeday.me/bug/20191101/1985466.html