JSP img元素无法显示本地图片的问题(二)_根源:spring访问静态资源

简介: JSP img元素无法显示本地图片的问题(二)_根源:spring访问静态资源

正常情况下应该是在webapp文件夹下放好就可以通过localhost:8080/css/a.css 访问文件(具体配置的话idea里面是在):

66a70d393cb8a372ea94f677372519c7_70.png

但是

我们设置拦截时是使用的/,表示说有请求都是通过springmvc来控制的,但是访问一些静态的文件时,也会经过springmvc来映射,这时你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了。

<servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/ApplicationContext-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

此时需要在

c9882795a546f7f5e72efcea28c67ec0_SouthEast.png

c0a9139c6609dfa2396883236cec6934_SouthEast.png

文件中加入静态资源文件访问的配置

<!-- 对静态资源文件的访问 -->
    <mvc:resources mapping="/static/**" location="/static" />

这段话表示了在访问路径中含有/static下所有的路径时,不启用MVC映射,而是直接访问

注意:**表示当前目录下的所有文件

mvc:resources:

<mvc:default-servlet-handler />

将静态资源的处理经由Spring MVC框架交回Web应用服务器处理。而<mvc:resources />更进一步,由Spring MVC框架自己处理静态资源,并添加一些有用的附加值功能。

首先,<mvc:resources />允许静态资源放在任何地方,如WEB-INF目录下、类路径下等,你甚至可以将JavaScript等静态文件打到JAR包中。通过location属性指定静态资源的位置,由于location属性是Resources类型,因此可以使用诸如"classpath:"等的资源前缀指定资源位置。传统Web容器的静态资源只能放在Web容器的根路径下,<mvc:resources />完全打破了这个限制。

其次,<mvc:resources />依据当前著名的Page Speed、YSlow等浏览器优化原则对静态资源提供优化。你可以通过cacheSeconds属性指定静态资源在浏览器端的缓存时间,一般可将该时间设置为一年,以充分利用浏览器端的缓存。在输出静态资源时,会根据配置设置好响应报文头的Expires 和 Cache-Control值。

在接收到静态资源的获取请求时,会检查请求头的Last-Modified值,如果静态资源没有发生变化,则直接返回303相应状态码,提示客户端使用浏览器缓存的数据,而非将静态资源的内容输出到客户端,以充分节省带宽,提高程序性能。

在springMVC-servlet中添加如下配置:

<mvc:resources location="/,classpath:/META-INF/publicResources/" mapping="/resources/**"/>

以上配置将Web根路径"/"及类路径下 /META-INF/publicResources/ 的目录映射为/resources路径。假设Web根路径下拥有images、js这两个资源目录,在images下面有bg.gif图片,在js下面有test.js文件,则可以通过 /resources/images/bg.gif 和 /resources/js/test.js 访问这二个静态资源。

假设WebRoot还拥有images/bg1.gif 及 js/test1.js,则也可以在网页中通过 /resources/images/bg1.gif 及 /resources/js/test1.js 进行引用。


AIEarth是一个由众多领域内专家博主共同打造的学术平台,旨在建设一个拥抱智慧未来的学术殿堂!【平台地址:https://devpress.csdn.net/aiearth】 很高兴认识你!加入我们共同进步!

目录
相关文章
|
15天前
|
缓存 监控 Java
优化Spring Boot应用的数据库访问性能
优化Spring Boot应用的数据库访问性能
|
15天前
|
缓存 监控 Java
优化Spring Boot应用的数据库访问性能
优化Spring Boot应用的数据库访问性能
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 10
`jsp:plugin`元素在JSP中用于基于浏览器类型插入OBJECT或EMBED标签以运行Java Applet或JavaBean。当插件缺失时,它会自动下载。属性如`codebase`, `code`, `width`, `height`用于配置组件,`jsp:param`传递参数。示例展示了一个包含错误处理fallback的applet使用案例。
30 4
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 7
`jsp:getProperty`动作用于从已定义的Bean中获取属性值并以字符串形式输出。基本语法是在`jsp:useBean`后使用`jsp:getProperty`,指定`name`为Bean的ID和`property`为要获取的属性。例如,一个名为`TestBean`的Java类有`getMessage()`方法,Bean在JSP中定义并使用后,可通过`jsp:getProperty`获取`message`属性。编译`TestBean.java`生成`.class`文件,并放入JSP项目相应目录以使用。
29 5
|
2月前
|
XML Java 数据格式
JSP 教程 之 JSP 动作元素 12
JSP `&lt;jsp:text&gt;`动作元素用于插入纯文本或EL表达式,不支持XML非法符号。在XHTML中声明DOCTYPE时必需。例子显示了在`&lt;books&gt;&lt;book&gt;`中使用`&lt;jsp:text&gt;`包裹的文本。比较使用和不使用该动作元素的效果差异。
22 2
|
2月前
|
XML Java 数据格式
JSP 教程 之 JSP 动作元素 11
JSP 动作元素 `&lt;jsp:element&gt;`, `&lt;jsp:attribute&gt;`, `&lt;jsp:body&gt;` 用于动态生成XML。这些元素在编译时动态创建,不是静态的。示例展示了如何使用它们定义一个XML元素,包含属性和主体。在浏览器中查看结果。
26 2
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 8
JSP `jsp:getProperty`动作用于从Bean获取属性值并以字符串形式输出。需指定Bean的`name`和要提取的`property`。给定一个名为`TestBean`的JavaBean示例,其中包含`message`属性。将编译后的`TestBean.class`放在正确目录下,JSP页面通过`jsp:getProperty`加载并显示Bean的`message`属性。访问`main.jsp`以查看结果。
31 2
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 9
JSP教程介绍了jsp:forward动作元素,它用于将请求重定向至其他页面。该动作仅有一个属性:page,可指定相对URL,支持静态或动态计算,能指向JSP或Servlet。示例中,date.jsp显示当前日期,main.jsp使用jsp:forward将请求转发至date.jsp,当访问main.jsp时,会显示date.jsp的日期信息。
34 2
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 6
`jsp:setProperty`用于设置Bean对象属性,可在外或内`jsp:useBean`中使用。在外时,无论Bean是否已存在都会执行;在内时,仅新建Bean时执行。属性包括:`name`(必需,指定Bean)、`property`(必需,指定属性,`*`匹配所有请求参数)、`value`(可选,直接指定属性值,支持类型转换)和`param`(可选,用请求参数值设置属性)。`value`与`param`不能同时使用。
32 1
|
2月前
|
Java
JSP 教程 之 JSP 动作元素 5
`jsp:setProperty`用于设置Bean对象属性,可在外或内`jsp:useBean`中使用。在外时,无论Bean是否新创建,都会执行。在内时,只在创建新Bean实例时执行。示例展示了两种用法。
33 1