如何从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
作为静态内容提供