gpt4 book ai didi

java - 在同一路径上共享静态内容和 mvc Controller

转载 作者:行者123 更新时间:2023-11-29 08:47:26 25 4
gpt4 key购买 nike

抱歉,如果这感觉重复,我收集了很多人问这个问题,但我一直无法找到有效的答案。

我有一个网络应用程序,使用 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 没有任何关于 resourcesstatic

  • 的废话
  • 此外,我真的很想用带注释的 Java 类来配置所有这些,并且没有任何 web.xmlapplication- 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 处理程序似乎没有效果。

最佳答案

要访问像 css js 或 html 这样的静态资源,请将所有这些文件保存在模块的 webapp 文件夹中。假设您所有的静态资源都在 src/main/webapp/static 路径中,您可以在上下文 xml 中进行 mvc 资源映射,如下所示

<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");

关于java - 在同一路径上共享静态内容和 mvc Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24410666/

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