首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改Spring中为静态内容服务的默认URL映射

更改Spring中为静态内容服务的默认URL映射
EN

Stack Overflow用户
提问于 2016-12-28 02:50:44
回答 5查看 26.6K关注 0票数 8

在我的应用程序中添加了一个新的控制器(非rest)之后,我的静态资源就停止工作了

代码语言:javascript
运行
复制
@RequestMapping(value = "/{postId}/{postUri:.+}", method = RequestMethod.GET)
public String viewPost(@ModelAttribute("model") ModelMap model, PathVariable("postId") String postId, PathVariable("postUri") String postUri) {
          // do something
}

调试后,我发现我新添加的控制器方法开始收集静态资源,基本上,它优先于静态资源的默认映射。

例如,对下面的静态资源的请求到达我的控制器,而不是静态资源处理程序。

代码语言:javascript
运行
复制
http://localhost:7999/css/bootstrap-2a31dca112f26923b51676cb764c58d5.css

我用的是弹簧引导1.4

由于我不想修改Controller方法的URL,所以是否有一种方法可以修改映射URL以服务默认的静态内容?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-12-28 08:11:23

当然可以。有一个spring.mvc.static-path-pattern可以用来覆盖它:

代码语言:javascript
运行
复制
spring.mvc.static-path-pattern=/resources/**

classpath:/static/css/foo.css映射到/resources/css/foo.css

(我在a862b6d中说得更清楚了)

话虽如此,我只能强烈建议改变你在那里的道路。拥有一个捕获根上下文的路径变量确实是个坏主意。

票数 14
EN

Stack Overflow用户

发布于 2017-05-26 12:34:54

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-spring-mvc-static-content

默认情况下,Spring将提供来自类路径中名为/static (或/public或/resources或/META/resources)的目录或ServletContext根目录中的静态内容。它使用Spring中的ResourceHttpRequestHandler,因此您可以通过添加自己的WebMvcConfigurerAdapter和重写addResourceHandlers方法来修改这种行为。

在独立的web应用程序中,容器中的默认servlet也是启用的,并充当后盾,如果Spring决定不处理它,则从ServletContext根目录中提供内容。大多数情况下,这种情况不会发生(除非您修改默认的MVC配置),因为Spring总是能够通过DispatcherServlet处理请求。

默认情况下,资源是在/**上映射的,但是您可以通过Spring.mvc.staticpath模式对其进行调优。例如,可以将所有资源重新定位到/ resources /**,具体如下:

代码语言:javascript
运行
复制
spring.mvc.static-path-pattern=/resources/**

您还可以使用Spring.Resoures.StaticLocations自定义静态资源位置(将默认值替换为目录位置列表)。如果这样做,默认的欢迎页面检测将切换到您的自定义位置,因此,如果在启动时的任何位置都有index.html,则它将是应用程序的主页。

除了上面的“标准”静态资源位置之外,还为Webjars内容创建了一个特例。任何在/ Webjars /**中具有路径的资源,如果打包成Webjars格式,都将从jar文件中得到服务。

票数 1
EN

Stack Overflow用户

发布于 2017-11-10 21:19:50

我使用@EnableWebMVC。对于我和spring引导服务服务器,默认localhost的静态内容为8888/,对localhost的静态内容为8888/some/

代码语言:javascript
运行
复制
@Configuration
public static class WebServerStaticResourceConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/some/path/").setViewName("forward:/index.html");
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41354724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档