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应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。

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

这篇关于404:源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示的问题解决思路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/644100

相关文章

关于Nginx跨域问题及解决方案(CORS)

《关于Nginx跨域问题及解决方案(CORS)》文章主要介绍了跨域资源共享(CORS)机制及其在现代Web开发中的重要性,通过Nginx,可以简单地解决跨域问题,适合新手学习和应用,文章详细讲解了CO... 目录一、概述二、什么是 CORS?三、常见的跨域场景四、Nginx 如何解决 CORS 问题?五、基

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

MySQL 中的服务器配置和状态详解(MySQL Server Configuration and Status)

《MySQL中的服务器配置和状态详解(MySQLServerConfigurationandStatus)》MySQL服务器配置和状态设置包括服务器选项、系统变量和状态变量三个方面,可以通过... 目录mysql 之服务器配置和状态1 MySQL 架构和性能优化1.1 服务器配置和状态1.1.1 服务器选项

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作