SpringMVC处理静态资源错误

问题遇到的现象和发生背景

配置一个SSM项目后发现不能正常访问静态资源
TOMCAT访问的主页是localhost:8080/ssm/,但是请求静态资源不是请求的localhost:8080/ssm/static/而是请求到localhost:8080/static/
服务器就返回404

img


下附springmvc配置文件的一部分及项目结构

SpringMVC配置文件及项目结构
id="viewResolver"
          class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8"/>
                    
                property>
            
        property>
    
    
  
    "static/" mapping="static/**"/>


img

我的解答思路和尝试过的方法

尝试更改 标签中mapping为“ssm/static/**”,无效

我想要达到的结果

能够正常请求到静态资源

望采纳!!!点击回答右侧采纳即可!!
我看了好久你的代码,看起来你的配置是正确的,这里配置了静态资源的访问路径为 localhost:8080/static/ , 如果你的静态资源文件实际位置为项目的 /WEB-INF/static/ 目录下,那么应该可以正常访问。

但是,我发现你的静态资源文件的位置是在项目根目录下的static文件夹中,这样配置的话会导致404错误,因为没有在该路径找到静态文件。

解决方法:是把静态资源文件夹移到WEB-INF目录下或者修改静态资源文件夹的路径,让其与配置文件中的路径一致,这样就可以正常访问了。

把static去掉试试

这个问题我来替你解决,若有帮助,还望采纳,点击回答右侧采纳即可。
我应该知道你的问题在哪里了,猜你应该是war包的形式部署,那你的静态资源理应可以挪出来,放在tomcat目录下的webapps文件夹下的,这样你就可以顺利通过 localhost:8080/static/xxx访问到了,你可以试试。

你的“/WEB-INF/templates/”模版文件写的有问题,需要追加contentPath

# 错误
<link rel="stylesheet" href="/static/default-theme.css" />
# 正确
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/default-theme.css" />

使用配置类配置tomcat映射静态资源也是不错的方案

缺少根路径,在访问资源时候加上这个根路径,你多看下开源项目,很多都会搞一个公共变量来存这个根路径

可以参考一下这篇文章:【SpringMVC处理静态资源

改下你的web.xml ,改成这样。或者项目发我,我本地给你调一下试试


    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/ssm/</url-pattern>
    </servlet-mapping>