道歉,如果这感觉重复,我会聚集很多人问这个,但我还没有找到一个有效的答案。
我有一个使用maven构建的网络应用程序。我使用Spring 4 MVC来提供RESTful Json API。我还有很多静态内容(html,css,js),我使用Angular.js在数据API上做了一个漂亮的面孔。
对于我的生活,我无法弄清楚如何在不弄乱他们的路径的情况下同时获得这两者。
我真的很想在我的浏览器中访问{APP_ROOT}/people/{id}
,并直接与我的REST api进行交互,而不会对/api/
或/rest/
我真的很想在我的浏览器中访问{APP_ROOT}/css/style.css
,并在src/main/webapp/css/style.css
内提供内容,而不会对resources
或static
做任何废话
另外,我真的很想用带注释的Java类配置所有这些,而不是web.xml
,application-context.xml
等。
因此,Spring调度程序servlet应该处理所有REST资源路径,然后回退到静态内容的默认Tomcat / Jetty处理程序。我认为这正是 default-servlet-handler 的用法?我似乎无法让它发挥作用。
这些是我的相关配置类:
WebAppInitializer.java
public class WebAppInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[0] ;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] { "/*" };
}
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
return new Filter[] { characterEncodingFilter};
}
}
WebConfig.java
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"my.example.package"})
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
使用此配置,我可以与REST api交互,但不能与静态内容交互。默认的servlet处理程序似乎没有任何效果。
答案 0 :(得分:0)
要访问css js或html等静态资源,请将所有这些文件保存在模块的webapp文件夹中。假设您所有的静态资源都在src / main / webapp / static路径中,您可以在上下文中执行mvc资源映射xml
<mvc:resources mapping="/index-dev.html" location="/static/index-dev.html"/>
<mvc:resources mapping="/index.html" location="/static/index.html"/>
<mvc:resources mapping="/app.js" location="/static/app.js"/>
<mvc:resources mapping="/appinit.js" location="/static/appinit.js"/>
<mvc:resources mapping="/extjs/**" location="/static/extjs/"/>
<mvc:resources mapping="/app/**" location="/static/app/"/>
<mvc:resources mapping="/static/**" location="/static/static/"/>
<mvc:resources mapping="/static/**" location="/static/"/>
既然你想在没有xml的情况下做到这一点,你可以在你的WebConfig类中进行,如下例所示
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/index.html").addResourceLocations("/static/index.html");
}