天天看點

解決相對路徑問題

在JSP頁面端,獲得本項目的絕對路徑(如果你的項目叫MyWeb),那麼獲得的位址就是(http://localhost:8080/MyWeb/):

解決方案一:

//java方法
<%
String path=request.getContextPath();
pageContext.SetAttribute("basePath",path);
%>
//EL方法
<a href="${pageScope.basePath}/jsp/register.jsp" target="_blank" rel="external nofollow" >
//在标簽a中的href屬性中,直接采用“${pageScope.basePath}”加上"/jsp/register.jsp",進而構成一個絕對路徑.(即:/MyWeb/jsp/register.jsp)
但是這樣做有一個不好的地方,那就是我們必須要在每一個連結的前面加上"${pageScope.basePath}"
           

解決方案二:利用html中的base标簽

base元素可規定頁面中所有連結的基準URL。

預設情況下:頁面中的連結(包括樣式表、腳本和圖像的位址)都是相對于目前頁面的位址(即:浏覽器位址欄裡的請求URL)。

可以 使用base标簽中的href屬性來設定,所欲的"相對基準URL"

<html>
<head>
<!-- base需要放在head中 -->
<base href="${pageContext.request.scheme }://${pageContext.request.serverName }:
${pageContext.request.serverPort }${pageContext.request.contextPath}/">
</head>
//這裡就可以直接使用相對路徑(即:相對于base标簽)
<a href="jsp/register.jsp" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >register</a>
</html>
           

執行完上述JSP後,所傳回的html,代碼如下

<html>
<head>
<base href="http://localhost:8080/MyWeb/" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >
</head>
//設定了base後,相對路徑,相對于的就是base的路徑。
<a href="jsp/register.jsp" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >register</a>
           

順便說下多個頁面使用:

首先建個path.jsp頁面,代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<base href="${pageContext.request.scheme }://${pageContext.request.serverName }:${pageContext.request.serverPort }${pageContext.request.contextPath}/" target="_blank" rel="external nofollow" >
           

然後在相應的JSP頁面使用:

//引入path.jsp頁面操作
<%@ include file="/commons/path.jsp" %>