Tomcat部署SpringMvc项目出现无法访问静态资源的问题

Tomcat部署SpringMvc项目出现无法访问静态资源的问题


最近在做一个web项目,在本地部署Tomcat服务器的时候可以访问静态资源,但是在服务器端却没有办法访问静态资源,网上找了很多博客,都不适用于我的情况,最后在师兄协助下解决了问题。


首先来看我的项目结构

在这里插入图片描述

webapp下存放的是静态资源statics和WEB-INF文件夹。
以下是我的jsp页面资源路径和mvc静态资源配置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在本地运行效果:
在这里插入图片描述
部署在阿里云服务器效果:
在这里插入图片描述
实际上在本地运行的时候我使用Idea配置了一个选项

在这里插入图片描述
这使得我可以不通过项目名访问到我的项目,
本地可以通过
http://localhost:8080/createsite/index
http://localhost:8080/index
访问项目页面
而服务器则只能通过
http://xx.xx.xx.xx:8080/createsite/index
访问页面
但是我最初不知道相关配置的真正功能,导致无法访问静态资源。

最后发现静态资源必须通过项目名访问
如果使用绝对路径,我的相关URL经过mvc配置
http://47.103.11.5:8080/css/reset.css
会变为
http://47.103.11.5:8080/statics/css/reset.css

所以将相关部分改为

在这里插入图片描述

之后,静态资源便可访问。
但是Idea的配置是怎么回事呢?这就要涉及Tomcat的运行原理了。
Tomcat是一个基于组件的服务器,他的构建组件都是可以配置的,Tomcat各个组件是在$TOMCAT_HOME/conf/server.xml文件中配置的。

<Server> 
<Service> 
<Connector/> 
<Engine> 
<Host> 
<Context/> 
</Host>
</Engine>
</Service>
</Server>

下面来说一下每个元素的作用:

server元素表示整个Catalina servlet容器。顶层类元素,可包含多个service元素

Service元素可包含一个Engine和多个Connector元素

一个Connector元素将在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户端。

Engine元素表示与特定Catalina服务相关联的整个请求处理机器它接收并处理来自一个或多个Connector的所有请求,并将完成的响应返回给Connector,以便最终传输回客户端。

host元素表示一个虚拟主机,它是服务器(如“www.mycompany.com”)的网络名与运行tomcat的特定服务器的关联。每个虚拟主机下都可以部署(deploy)一个或者多个Web App,每个Web App对应于一个Context,有一个Context path

context元素表示在特定虚拟主机中运行的web应用程序。每个web应用程序都基于一个web应用程序存档(WAR)文件,或者一个包含相应解包内容的对应目录

结构图:

在这里插入图片描述
实际上Idea的改动就是在此app的host下添加了Context,令path="/",docBase为webapps下的项目文件夹

在这里插入图片描述
做出以上改动后,服务器上部署的项目也可以免项目名访问了!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值