Servlet的forward问题,造成jsp中的相对路径不可用,不知有没有解决办法?

njubei
04-06-23 0 487

假设浏览器发出一个请求 http://localhost/mc/index.jsp

index.jsp将请求交给了某个Servlet来处理,该Servlet在request中设置了一些属性,然后使用了下面的forward语句:

request.getRequestDispatcher("/mc/zh/hello.jsp").forward(request, response);

在hello.jsp中有一些图片要显示,使用的是相对路径,图片与hellp.jsp放在一起,即在zh目录下。

此时问题来了:图片无法显示!
而把图片放到mc目录下,却又能正常显示。

可能原因:浏览器发出/mc/index.jsp请求后,记住了当前的目录层次是mc;
经过服务器的处理,返回的是mc/zh目录下的页面hello.jsp,但浏览器不知道目录层次已发生变化;
浏览器发现hello.jsp中要取图片,且是相对路径,于是要把相对路径转换为绝对路径并向服务器发出GET请求,在转换的时候,浏览器以为当前的目录是mc,于是就组装为http://localhost/mc/a.gif。如此一来,就和hello.jsp中的相对路径含义不一样了。

不知我这样的解释是否对,如果真是这样,服务器是否有办法通知浏览器目录层次已发生改变?(看了一下HTTP头字段,没有发现有用的)