java如何从Vaadin/Spring应用程序提供静态资源?
我有一个Vaadin web应用程序,它与spring security集成用于身份验证。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上下文并返回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。因此,战争结构看起来像:
- /jsp
- /META-INF
- /瓦丁
- /WEB-INF
图像和css都不会被加载,因为显然所有这些请求都映射到了vaadin servlet。我如何定义一些静态资源目录,而vaadinservlet不会提供这些资源?我尝试了SpringMVC:resources,但没有成功。谢谢你的帮助
再见, 菲利普
我已经弄明白了。虽然这是一个解决办法。我已经将Vaadin应用程序Servlet映射到像/app/*这样的东西,而不是映射到/*(请记住,在本例中,您还必须将同一个Servlet映射到/Vaadin/*)。通过这种配置,我可以从我的webapp访问jsp目录,一切正常。我已经删除了整个Spring资源配置,因为这根本不起作用
所以再一次,我仍然对这个解决方案不太满意,我更愿意用其他方式配置我的资源目录,但客户很高兴:)。如果有人找到了正确的解决方案,我将不胜感激地阅读
# 1 楼答案
我已经弄明白了。虽然这是一个解决办法。我已经将Vaadin应用程序Servlet映射到像/app/*这样的东西,而不是映射到/*(请记住,在本例中,您还必须将同一个Servlet映射到/Vaadin/*)。通过这种配置,我可以从我的webapp访问jsp目录,一切正常。我已经删除了整个Spring资源配置,因为这根本不起作用
所以再一次,我仍然对这个解决方案不太满意,我更愿意用另一种方式配置我的资源目录,但是c
# 2 楼答案
使用url重写筛选器可以更好地控制url映射
然后将Vaadin应用程序映射到/Vaadin,并在URLRewite中配置url映射。xml
编辑 另一个选项是将静态文件放在/VAADIN/目录中
# 3 楼答案
可能已经晚了,但是对于那些在使用vaadin
/*
映射时仍然无法提供静态内容的人来说,我找到的解决方案是使用apache的默认servletorg.apache.catalina.servlets.DefaultServlet
,因此是一个web。xml将有如下内容:因此,在上面的示例中,尽管在
/*
处有vaadin,但是/customer/*
部分将被DefaultServlet
用作静态内容