使用SpringMVC时,web应用的资源路径问题
2020-02-01 16:01:03来源:博客园 阅读 ()
使用SpringMVC时,web应用的资源路径问题
web应用常见的资源存方式
- 在WEB-INF下新建lib,存放要使用的jar包
- 在WEB-INF下新建jsp文件夹,存放jsp文件。首页除外,首页就放到web下。
- 在web下,或WEB-INF下,新建css、js、image文件夹,存放相关文件。
WEB-INF目录是web应用的安全目录,里面的资源不能被浏览器直接访问。
web下的静态资源(html、css、js、图片等)都不能被浏览器直接访问,
直接放到web下,或者放到WEB-INF下,都是一样的。
web下的动态资源(jsp)可以被浏览器直接访问,比如浏览器直接访问web下的首页index.jsp,这是可以的。
如果把jsp放到WEB-INF下,那jsp受到WEB-INF的保护,浏览器就不能直接访问。
SpringMVC提倡由controller处理请求,调用视图来响应,用户不能直接访问视图,所以把jsp放到WEB-INF下。
总得留个页面作为网站入口吧,入口的index.jsp直接放在web下,用户可以直接访问。
lib的存放
部署项目时,会把jar包拷贝到输出目录的 WEB-INF\lib 下。
在WEB-INF下新建文件夹lib,把所需的jar包放到lib下,
部署项目时,会把所有的jar包都拷贝到输出目录的 项目\WEB-INF\lib 里。
如果我们是在web下新建lib存放jar包,或者在项目下新建lib存放jar包,
部署项目时,会把所有的jar包拷贝到输出目录的 项目\WEB-INF\lib里,并会把我们新建的lib文件夹拷贝到输出目录的 项目下,这一步就多余了,没必要。
如果部署时,jar包拷贝不全,参考:
https://www.cnblogs.com/chy18883701161/p/12240317.html
静态资源配置
我们在web.xml中使用DispatcherServlet拦截所有请求,所有的请求都转交给controller处理。
就是说,前端页面的<img />要加载图片、<script src="">要加载js脚本、<link />要加载的样式表,这些请求都会被DispatcherServlet拦截,
而DispatcherServlet又找不到对应的controller来处理这些请求,即使路径是对的,在浏览器中f12->Network,看到状态码是404、或者400(由于找不到所需的资源而引起的错误)。
我们需要配置一下静态资源,让DispatcherServlet放行某些静态资源的请求。
有3种配置方式。
配置方式一:配置资源映射(最常用)
<mvc:resources mapping="/js/**" location="/js/**" /> <mvc:resources mapping="/css/**" location="/css/**" /> <mvc:resources mapping="/image/**" location="/image/**" />
location是实际地址,mapping是映射地址。一般我们不改路径,只是让DispatcherServlet放行。
<mvc:resources />是以文件夹为单位配置的,最小单位只能是文件夹,不能是文件。
可以写上**表示该文件夹下的所有东西,也可以缺省**。
这种方式可以放行对静态资源的请求、对WEB-INF下资源的请求、对动态资源(jsp)的请求。
配置方式二:配置默认的ServletHandler
<mvc:default-servlet-handler default-servlet-name="default" />
配置web服务器默认的ServletHandler,DIspatcher拦截到静态资源后,找不到对应的controller来处理,会交给web服务器默认的ServletHandler来处理。
默认的ServletHandler会调用web服务器的默认Serlvet来处理,web服务器的默认Servlet的处理方式都是直接放行(返回该资源作为响应)。
但不同的web服务器,默认Servlet的name是不同的:
- Tomcat、Jetty、Jboss、GlassFish的默认Servlet的name是default
- Resin的是resin-file
- WebLogic的是FileServlet
- WebSphere的是SimpleFileServlet
更换web服务器时,需要修改default-servlt-name,配置简单但项目移植性差。
配置方式三:在web.xml中配置默认Servlet的映射
<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> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping>
使用多个<filter-mapping>,不能一个<filter-mapping>里配置多个<url-pattern>,也不能在一个<url-pattern>里配置多个规则。
麻烦且移植性差。
方式一、三更灵活,可以指定要加载的静态资源,方式二是加载项目中所有的静态资源。
方式二、三响应静态资源更快,因为web服务器启动时就会创建默认Servlet的实例,就会加载静态资源,静态资源一直在内存中,响应快、但吃服务器内存。
方式一是请求这个静态资源时才加载,用完就释放,速度慢、但内存占用少。
原文链接:https://www.cnblogs.com/chy18883701161/p/12249175.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- Spring WebFlux 学习笔记 - (一) 前传:学习Java 8 Stream Ap 2020-06-11
- eclipse下创建Maven项目(包含webapp目录结构) 2020-06-09
- SpringBoot通过web页面动态控制定时任务的启动、停止、创建 2020-06-09
- 聊聊 OAuth 2.0 的 token expire_in 使用 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash