2

我们正在按照 Thomas Broyer 为 GWT 应用程序和他的多模块 maven 原型提出的结构开发一个新应用程序。

在服务器模块中,我们包含了 Spring 3.1.1 和 Spring Security 3.1.0。我们有一个控制器来提供登录和 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

导致 Not Found 错误。

我知道如何处理本地资源(包含在 webapp 中):

registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");

但 app.nocache.js 是包含在其他叠加层中的资源。

我的问题是:我怎么能告诉 Spring 不要处理另一个覆盖中包含的资源?我试过了

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

在 Spring java config(扩展 WebMvcConfigurerAdapter)中,但同样的问题。

4

1 回答 1

2

终于明白了。

问题只是一个 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();
}

给您带来的不便深表歉意。

于 2012-09-20T11:47:34.903 回答