如何从Vaadin / Spring应用程序提供静态资源?

我有Vaadin Web应用程序与Spring安全集成进行身份validation。 Vaadin servlet的配置非常简单:

 Vaadin Application Servlet com.example.SpringApplicationServlet  applicationBean mainApplication   widgetset com.example.widgetset.CustomWidgetSet    Vaadin Application Servlet /*  

servlet初始化Spring Context并返回Vaadin应用程序。 我还为此配置了安全性,并且具有如下配置的自定义登录表单:

  login /jsp/login.jsp   login /login   login_error /jsp/loginError.jsp   login_error /login_error  

登录表单采用外部CSS设置,并且还有一些图像。 基本上,图像位于/ jsp / img中,而样式表位于/jsp/login.css中。 所以WAR结构如下所示:

  • / JSP
  • / META-INF
  • / VAADIN
  • / WEB-INF

图像和css都没有被加载,因为显然所有这些请求都被映射到vaadin servlet。 如何定义一些静态资源目录,这些目录不会由Vaadin servlet提供? 我尝试过spring mvc:resources但是没有用。 感谢您的帮助。

再见,菲利普

我已经弄明白了。 虽然它是一种解决方法。 我已经将Vaadin Application Servlet映射到/ app / *而不是/ *(请记住,在这种情况下,您还必须将相同的servlet映射到/ VAADIN / *)。 使用此配置,我可以从我的webapp访问jsp目录,一切正常。 我删除了整个Spring Resources配置,因为这不起作用。

所以再一次,我仍然对这个解决方案不太满意,而宁愿以其他方式配置我的RESOURCES目录,但客户很高兴:)。 如果有人得到了正确的解决方案,我将不胜感激。

使用url重写filter可以更好地控制url映射。

  UrlRewriteFilter org.tuckey.web.filters.urlrewrite.UrlRewriteFilter   UrlRewriteFilter /*  

然后将Vaadin应用程序映射到/ vaadin,并在urlrewrite.xml中配置url maping

   /styles/** /styles/$1   /images/** /images/$1   /** /vaadin/$1   /vaadin/** /$1  

编辑其他选项是将静态文件放在/ VAADIN /目录中。

我已经弄明白了。 虽然它是一种解决方法。 我已经将Vaadin Application Servlet映射到/ app / *而不是/ *(请记住,在这种情况下,您还必须将相同的servlet映射到/ VAADIN / *)。 使用此配置,我可以从我的webapp访问jsp目录,一切正常。 我删除了整个Spring Resources配置,因为这不起作用。

所以再一次,我对这个解决方案仍然不太满意,宁愿以其他方式配置我的RESOURCES目录,但是c

可能会迟到但是对于在使用vaadin /*映射时仍然遇到静态内容问题的人,我发现的解决方案是使用apache的默认servlet org.apache.catalina.servlets.DefaultServlet ,因此web.xml将具有如下内容:

    myservlet com.vaadin.server.VaadinServlet  UI com.ex.myprj.MyUI    widgetset com.ex.myprj.AppWidgetSet    myservlet /*   Static content Servlet org.apache.catalina.servlets.DefaultServlet  debug 0   listings false  1   Static content Servlet /customer/*   

所以在上面的例子中,尽管在/*有vaadin, /customer/*部分将由DefaultServlet作为静态内容提供