星星之火-Servlet中使用getRequestDispatcher转发到页面失去样式等问题

本文最后更新于:December 3, 2021 pm

积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。

目录

今天在弄验证码生成后的显示效果时,在Servlet中处理后转发遇到的一些问题。主要是转发后页面的样式、链接等资源失效的原因和解决办法。下面是我在Servlet中转发到JSP文件中遇到的,在其他页面等同。

原因

当我们在引用外部样式和js时,我们在后台处理完数据后,转发或重定向到jsp页面时就会出现样式丢失的情况,我们通过引用时写的是相对路径,而不是绝对路径。在servlet中转发时css和图片的路径变成相对于这个servlet的相对路径而非相对于web项目的路径了。

简单说就是我们的URL的问题,我们写成了相对路径,在转发后,相对的就不是之前的那个目录了,所以样式之类的资源就丢失了。所以应该写成绝对路径。

解决办法

在路径上加上当前项目的名称即可。如:

1
<link rel="stylesheet" href="/demo1_war/static/css/codePagestyle.css">

其中,/demo1_war是我当前的项目名称。项目名称也可以动态获取,如下:

1
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/css/codePagestyle.css">

这个等于上面的效果。同理,也可以用于其他的路径上,如:

1
<img src="${pageContext.request.contextPath}/images/logo.gif"

当然了,解决办法不止这一种,其他方法可自行百度。