编程语言
首页 > 编程语言> > java-如何通过Vaadin / Spring应用程序提供静态资源?

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