404:源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示的问题解决思路

阅读: 评论:0

404:源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示的问题解决思路

404:源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示的问题解决思路

文章目录

  • 概述
  • 静态资源映射问题
  • 路径匹配问题

概述

今天把一个尘封已久的项目拿出来跑发现访问其中一个静态页面的时候显示如下错误:

先开始我想的是不是路径写错了,但是经过排查发现不是。然后查了一堆资料也没有解决。最后发现是静态资源映射的代码被我注释掉了,直接裂开:

接下来就说说这种问题的两种解决思路:

  • 静态资源映射导致的问题
  • 路径匹配不上导致的问题

静态资源映射问题

首先我们知道Tomcat在运行SpringMVC的web项目时,存在着以下几个步骤:

也就是根web上下文,MVC上下文,初始化DispatcherServlet,初始化Servlet的bean

我这里没有使用MVC上下文,直接使用的spring根上下文所以没有显示

而DispatcherServlet负责总的调度,我们一般会让Dispatcher拦截所有请求:

	@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}

也就是说这个时候所有的项目请求都会被交给SpringMVC处理。但是我们如果要访问静态资源,同样也会被拦截。

所以这个时候我们要配置静态资源映射,让我们能顺利访问。

代码如下:

@Configuration
public class SpringMVCSupport extends WebMvcConfigurationSupport {@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");registry.addResourceHandler("/js/**").addResourceLocations("/js/");registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");registry.addResourceHandler("/css/**").addResourceLocations("/css/");}
}
  • addResourceHandler添加访问路径
  • addResourceLocation添加映射后的真实路径
  • 映射的真实路径末尾必须加/,不然映射不到适用于 windows和linux

路径匹配问题

有的时候可能是路径问题:

如果实在是弄不懂文件的路径,我们可以对照着文件夹写,例如我们找到项目编译之后的target文件夹在里面我们可以看到一个和项目同名的文件夹:

这个文件夹就是当前项目在tomcat或者其他服务器上运行时的文件夹结构,我们对照着写就可以了。

然后还要注意静态资源不能放在WEB-INF文件夹中。因为WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。

如果想在页面中直接访问其中的文件,必须通过 l 文件对要访问的文件进行相应映射才能访问。

本文发布于:2024-01-30 05:41:16,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170656447819626.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:资源   不愿   或者是   思路   目标
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23