我们正在开发一个新的应用程序,遵循 Thomas Broyer 为 GWT 应用程序及其多模块 Maven 原型(prototype)提出的结构。
在服务器模块中,我们包含了 Spring 3.1.1 和 Spring Security 3.1.0。我们有一个 Controller 用于提供 SignIn 和 GWT 的主机页面。该模块使用jetty maven插件版本8.1.3.v20120416。在此模块中,我们将客户端模块配置为覆盖层并添加了其资源:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<scanIntervalSeconds>1</scanIntervalSeconds>
<webApp>
<baseResource implementation="org.eclipse.jetty.util.resource.ResourceCollection">
<resourcesAsCSV>src/main/webapp,${basedir}/../accounts-ui-client-desktop/target/accounts-ui-client-desktop-${project.version}/</resourcesAsCSV>
</baseResource>
<extraClasspath>${basedir}/../accounts-ui-shared/target/classes/</extraClasspath>
<jettyEnvXml>${basedir}/src/main/resources/jetty-web.xml</jettyEnvXml>
</webApp>
<systemProperties>
<systemProperty>
<name>java.util.logging.config.file</name>
<value>${basedir}/src/main/resources/logging.properties</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
我们在 web.xml 中的配置将 DispatcherServlet 映射到/模式。
当使用 jetty:run 运行服务器模块时,我们在提供客户端模块中包含的静态内容时遇到问题,特别是当提供 gwt 的托管页面时,它会请求
http://localhost:8080/app/app.nocache.js
导致未找到错误。
我知道如何处理本地资源(包含在 web 应用程序中):
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
但是app.nocache.js是包含在其他覆盖层中的资源。
我的问题是:我如何告诉 Spring 不要处理另一个覆盖中包含的资源?我尝试过
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
在Spring java配置(扩展WebMvcConfigurerAdapter)中但同样的问题。
最佳答案
终于明白了。
问题仅出在 Maven 上。我刚刚从父 pom 进行了全新安装,现在一切正常。
web.xml 的最终配置是:
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
以及扩展 WebMvcConfigurerAdapter 的 @Configuration 类中 Spring 的最终配置:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/favicon.ico").addResourceLocations("/favicon.ico");
registry.addResourceHandler("/app/**").addResourceLocations("/app/");
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
对于给您带来的不便,我们深表歉意。
关于spring - 多模块 GWT 2.4.0 - Spring 3.1.1 应用程序中的静态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12499255/