在 struts 引用中使用 tiles 模板时,JSP 文件引用外部文件需注意路径问题!

先给出工程的目录结构:

webproject
  |
  |-css
  |  |-head.css
  |  |-body.css
  |  |-foot.css
  |
  |-img
  |  |-head_bg.jpg
  |  |-body_gb.jpg
  |
  |-WEB-INF
  |   |-pages
  |      |-head.jsp
  |      |-body1.jsp
  |      |-body2.jsp
  |      |-body3.jsp
  |      |-layout.jsp
  |      |-foot.jsp
  |
  |-index1.jsp
  |-index2.jsp
  |-index3.jsp

其中 layout.jsp 是模板,index1.jsp 、index2.jsp 和 index3.jsp 的代码如下:

index1.jsp 如下-------------------------------------------------

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

<tiles:insert page="/WEB-INF/pages/layout.jsp" flush="true">
  <tiles:put name="head" value="head.jsp"></tiles:put>
  <tiles:put name="body" value="body1.jsp"></tiles:put>
  <tiles:put name="foot" value="foot.jsp"></tiles:put>
</tiles:insert>


index2.jsp 如下-------------------------------------------------

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

<tiles:insert page="/WEB-INF/pages/layout.jsp" flush="true">
  <tiles:put name="head" value="head.jsp"></tiles:put>
  <tiles:put name="body" value="body2.jsp"></tiles:put>
  <tiles:put name="foot" value="foot.jsp"></tiles:put>
</tiles:insert>
 
 
index2.jsp 如下-------------------------------------------------

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

<tiles:insert page="/WEB-INF/pages/layout.jsp" flush="true">
  <tiles:put name="head" value="head.jsp"></tiles:put>
  <tiles:put name="body" value="body3.jsp"></tiles:put>
  <tiles:put name="foot" value="foot.jsp"></tiles:put>
</tiles:insert>

下面给出 layout.jsp 和 head.jsp 的源码

layout.jsp -----------------------------------------
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>head.jsp</title>
</head>
<body>
    <tiles:insert attribute="head"></tiles:insert>
    <tiles:insert attribute="body"></tiles:insert>
            <tiles:insert attribute="foot"></tiles:insert>
 
        </body>
</html>

head.jsp ---------------------------------------------------------

<%@ page language="java" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>head.jsp</title>
  <link href="css/header.css" [/color] rel="stylesheet" type="text/css" />
  </head>
 
  <body>
    <img src="img/head_bg.gif"/>[color=red]

    <div class="head">
       <ul>
         <li><a href="#">##</a></li>
         <li><a href="#">##</a></li>
         <li><a href="#">##</a></li>
         <li><a href="#">##</a></li>
      </ul>
    </div>
  </body>
</html>

我们注意到,在上面的两个路径中,如果相对于当前的 head.jsp 文件,那么 CSS 的link 路径应该为:
<link href="../../css/header.css" [/color] rel="stylesheet" type="text/css" />

同样,引用背景图片的路径也应该为:
<img src="../../img/head_bg.gif"/>[color=blue]


但是,这样是错的!
当工程运行的时,用户请求 index1.jsp 时,用 tiles:insert 来的 head.jsp 将找不到它想引用的 CSS 和背景图片。
因为当用户请求 index1.jsp 时,这时 URL 地址是: http://localhost:8080/webproject/( 在WEB.XML 中配了 index1.jsp 为 welcome-file)
而此时 head.jsp 的路径也在此 (试验出来,没完全确定),故此时 head.jsp 引用的 CSS 和背景图片路径应该从此路径开始。所以 head.jsp 引用它们的路径分别应该为:
<link href="css/header.css" [/color] rel="stylesheet" type="text/css" />

<img src="img/head_bg.gif"/>[color=red]


不知是否如此,望高人指正!

你可能感兴趣的:(jsp,Web,css,struts,XHTML)