今天,遇到了一个很奇怪的现象,首页的jsp可以使用相对路径来访问样式表和图片(类似这种的:image/xx.png),可是另一个jsp必须用request.getContextPath()/image/xxx.png才能访问到,知道是路径问题。想了N久,终于知道,原来我的首页是servlet的request.getRequestDispatcher("jsp/layout/main.jsp").forward(request, response);这个玩意转过来的,这种方法转向类似管道,即使跳转main.jsp,但是你的地址还是定位在基于servlet的,而servlet的地址在服务器已解析,是基于项目名的,所以你可以直接使用image/xx.png。
而我的另一个jsp,则是正常的jsp之间的跳转,此时如果再使用image/xx.png,客户端就会在jsp所在的目录中来寻找,就是基于这个jsp的地址来相对寻找,所以在这个jsp中你就要获取项目的根路径,在根路径下来相对寻找。
为了项目易维护,建议别轻易使用相对路径,建议如下:
方法一(利用base ):
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
方法二:标签
<c:set var="path" value="${pageContext.request.contextPath}"/>
<link href="${path}/css/layout/style.css" rel="stylesheet" type="text/css" />
好了,如果还有其它问题,共同交流哈,如果有问题请指正。