Idea 2020插入图片资源的坑(自定义404,500页面)

项目的结构如下:

首先运行tomcat,打开699.jsp,但是图片资源无法显示:

查看控制台:

发现图片资源返回的请求是404,就是没有找到这个图片资源,但是查看下面的图片所在目录是正确的,我明明已经把图片资源放到images目录里面了,不可能找不到啊。

这就是idea的坑爹之处了。

对于新加进去的资源文件,maven并不能及时加载,这就导致了部署到tomcat后出现404错误。解决方法其实非常简单:

手动更新一下就可以了。有时候点一下可能还不行,得多点几下。

然后重启tomcat,打开600.jsp,图片就可以正常显示了:


网上有些解决方案说,在web.xml文件中添加默认servlet取消对图片资源的拦截:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpeg</url-pattern>
  </servlet-mapping>

 但是这种解决的是SpringMVC框架对图片资源的拦截,对我这个问题的解决是没有任何帮助的。因为我只是在jsp文件中添加一个图片资源,并没有使用任何的框架。


坑虽然不大,但是也耗费了整整五六个小时的时间才解决,原因就是图片路径和服务器缓存的问题,其实图片路径是个非常简单的问题,只要在填写路径的时候,idea能够弹出来提示:

像这样就说明路径是对的,但是碰上该死的图片缓存加上maven的更新不及时,就可能导致一系列的问题,让人分不清什呢才是真正的问题。

这样就导致用同样的方法这一个jsp文件中图片会正常显示 ,但是另一个jsp文件中的图片却不能显示,这是因为可能某次阴差阳错的使得图片正常显示了一次,但是这时候图片的路径其实是错误的,这样在访问jsp文件的时候,虽然图片路径不对,但是图片依然能够正常显示,这就是因为服务器是直接从缓存中获得的图片资源,而不是按照路径找的。


自定义404,500页面:

在web.xml文件中添加以下代码:

<error-page>
    <error-code>404</error-code>
    <location>/error/404.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/error/500.jsp</location>
  </error-page>

然后启动tomcat,随便输入一个不存在的文件:

 

并没有打开我想要的页面,但是直接打开404.jsp,图片是可以正常显示的:

F12:

可以看出,页面是已经跳到404.jsp了,但是图片资源没有正常显示,可以看到图片的路径是错误的。之所以会出现这个错误,是因为在404.jsp文件中图片资源的路径使用的是相对路径:

<img src="../images/404.png" alt="404.png Not Found"/>

结合项目的目录:

我目前访问的是: 

这个12是和images目录同一级的,而../是返回上一级目录,即和项目目录同一级的目录,所以服务器找到http://localhost:8080/images/404.png ,当然这个目录是不存在的,所以会找不到图片资源。

可以在images同级目录中找一个不存在的文件:

这样是可以正确显示404页面的,从这里可以看出,

<img src="../images/404.png" alt="404.png Not Found"/>并不是从jsp文件的上一级开始寻找图片资源,而是从要访问的文件的上一级目录开始寻找图片资源文件!!!

要解决这个方法,可以直接把图片的路径写死:

<img src="/ImageTest_war/images/404.png" alt="404.png Not Found"/>

 这样不管访问的文件在哪一级目录下,都能正确找到图片资源:

 更好的方式是用EL表达式获取部署项目的路径,即web应用的名称:

<img src="${pageContext.request.contextPath}/images/500.png" alt="Not Found"/>

在用这个之前,一定要保证自己的webapp版本高于2.4!!

idea另一个坑:用maven构建的项目webapp版本默认是2.3,是识别不了EL表达式的!!!

采用高版本:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">
</web-app>

 

 

 

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在IntelliJ IDEA插入图片可以通过以下步骤完成: 1. 首先,将要插入的图片转换为Base64格式。可以使用在线工具,如http://imgbase64.duoshitong.com/,将图片转换成Base64字符串。 2. 在文章末尾或某个固定位置,将Base64字符串以id的形式保存下来,如`[doge]:data:image/png;base64,iVBORw0......`。 3. 在文章中的要插入图片的位置,使用Markdown语法插入图片的引用。例如,`![avatar][doge]`,其中`doge`是前面保存的id。 4. 最后,刷新界面或重新加载文章时,IntelliJ IDEA会根据引用的id找到对应的Base64字符串并将其解析为图片显示在文章中。 通过上述步骤,您就可以在IntelliJ IDEA插入图片并显示在文章中了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [IDEA的md文件中插入图片的方法](https://blog.csdn.net/sophie1314/article/details/90897968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [ELearning设计文档1](https://download.csdn.net/download/weixin_35767338/86346278)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值