启动服务器的时候后台没有报错,但是通过浏览器访问项目的时候报404

本文总结了解决项目部署中常见的404问题的方法,包括调整Tomcat部署路径、修正浏览器访问路径及修复SpringMVC拦截配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天部署项目的时候报出来404问题,查看Eclipse的Console后发现并没有报错。检查了一下,最后发现原来是SpringMVC的拦截配置问题,所以将web.xml中的"/*"改为“/”就好了。还有另外两种情况也会出现这种问题,在这里总结一下。


1、web服务器的项目部署路径的问题

      在Eclipse中刚刚添加上Tomcat服务器后,并没有配置Tomcat的项目部署路径,所以在浏览器地址栏中输入http://localhost:8080后Tomcat的主页的访问不到。这个问题只需要配置一下Tomcat的项目部署路径即可解决:

      将Service一栏中的Tomcat服务器delete掉,重新添加Tomcat服务器(先不要添加任何项目),添加好Tomcat后,双击Tomcat服务器,会出现如下图,按照如下图指示修改并按Ctrl+S保存好即可。


按照图中指示修改好,启动服务器,打开浏览器,在浏览器地址栏上输入http://localhost:8080即可访问Tomcat主页。


2、浏览器访问路径出错

      这种情况一般出现在复制并粘贴的项目中,修改了项目名称,然后按照项目名称键入浏览器地址栏访问,会出现404问题。这种情况很好修改,因为在项目中保留的是原来项目的项目名访问设置,所以要用现有的项目名称访问的话,需要改一个地方,在项目名上右键,选择Properties,如下图:


修改好项目中的路径名称后Apply and Close,这样在浏览器地址栏中就可以使用现在的项目名来访问了。


3、拦截器配置问题

      这种情况就是我所遇到的,也很常见。在web.xml中配置了SpringMVC的核心控制DispatcherServlet,拦截请求的问题,如图:

    当url-pattern配置为 /* 时,会拦截所有的请求,转发到jsp时也会被拦截,不能访问到jsp文件。所以应该修改为 /

  

注:如果修改为 / 时出现某些静态文件不能正常显示的问题,如图片、js、css等,可以在web.xml中配置静态资源访问即可:

   在web.xml中添加:

            <!-- 设置静态文件访问  -->
            <servlet-mapping>
              <servlet-name>default</servlet-name>
              <url-pattern>*.jpg</url-pattern>
            </servlet-mapping>
 
            <servlet-mapping>
              <servlet-name>default</servlet-name>
              <url-pattern>*.js</url-pattern>
            </servlet-mapping>
 
            <servlet-mapping>
              <servlet-name>default</servlet-name>
              <url-pattern>*.css</url-pattern>
            </servlet-mapping>


### 回答1: 这是因为你的请求涉及到跨域访问,而后台服务器没有设置允许跨域访问的响应头,导致浏览器拒绝了该请求。解决这个问题可以在后台服务器的响应头中添加`Access-Control-Allow-Origin`字段,其值为允许跨域访问的域名。例如,如果你想允许所有域名进行跨域访问,可以在响应头中添加如下字段: ``` Access-Control-Allow-Origin: * ``` 如果你想只允许特定的域名进行跨域访问,可以将`*`替换为该域名。例如: ``` Access-Control-Allow-Origin: http://example.com ``` 注意,这个字段必须出现在响应头中,并且必须在其他响应头字段之前。 ### 回答2: 这个错误提示是由于跨域资源共享(CORS)策略引起的。默认情况下,在浏览器中,JavaScript脚本只能从与加载页面的同一域名下发起HTTP请求,能跨域。而当我们使用axios库从JavaScript代码中访问后台接口时,如果后台接口的响应中没有包含特定的跨域许可头信息(Access-Control-Allow-Origin),则会触发这个错误。 要解决这个问题,可以尝试以下方法: 1. 修改后台接口的响应头。在后台接口返回响应之前,添加一个名为"Access-Control-Allow-Origin"的头,并将其值设置为允许访问该接口的域名或"*"。例如,可以在返回的响应头中添加以下信息: ```javascript res.setHeader('Access-Control-Allow-Origin', '*'); ``` 2. 使用代理服务器。可以在前端代码中配置一个代理服务器,将axios请求转发到后台接口,并将响应返回给前端。这样,由于前端代码是在与后台接口同一域名下运行的,就存在跨域问题了。例如,可以在项目的根目录下创建一个vue.config.js文件,并添加以下配置: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://example.com', // 代理的后台接口域名 changeOrigin: true } } } }; ``` 然后在前端代码中访问后台接口时,将URL修改为代理服务器的URL,例如: ```javascript axios.get('/api/some-api').then(response => { // 处理响应 }).catch(error => { // 处理错误 }); ``` 通过以上方法中的一种或两种,应该能够解决使用axios访问后台接口时的CORS错误。 ### 回答3: 出现该错误是由于浏览器的同源策略(Same-Origin Policy)导致的。同源策略要求浏览器只能访问与当前网页具有相同协议、域名和端口的资源。 当使用axios访问后台接口时,如果后台没有配置跨域请求的允许访问控制头信息(Access-Control-Allow-Origin),则会出现该错误。 为了解决这个问题,我们可以通过以下几种方法: 1. 在后台服务器的响应头中添加Access-Control-Allow-Origin的值为"*",表示允许所有域名访问该接口。例如在Node.js中,可以通过设置响应头实现: ``` response.setHeader("Access-Control-Allow-Origin", "*"); ``` 2. 如果允许所有域名访问该接口,可以将Access-Control-Allow-Origin的值设置为请求的域名。例如,如果前端页面运行在 http://localhost:3000 上,可以设置为: ``` response.setHeader("Access-Control-Allow-Origin", "http://localhost:3000"); ``` 3. 使用代理服务器。可以在Web服务器前面添加一个代理服务器,然后由代理服务器去请求后台接口。这样,通过代理服务器发送的请求是同域的,就会受到同源策略的限制。 以上是几种常见的解决方案,根据具体的开发环境和需求,选择适合的方法来解决这个错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值