gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:22 26 4
gpt4 key购买 nike

我有 Vaadin Web 应用程序和用于身份验证的 spring 安全集成。 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 中。所以 WAR 结构看起来像:

  • /jsp
  • /元信息
  • /瓦丁
  • /WEB-INF

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

再见,菲利普

我想通了。虽然这是一种解决方法。我已将 Vaadin 应用程序 Servlet 映射到类似/app/* 而不是/*(请记住,在这种情况下,您还必须将同一 servlet 映射到/VAADIN/*)。通过此配置,我可以从我的 webapp 访问 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/目录中。

关于java - 如何从 Vaadin/Spring 应用程序提供静态资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9292439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com