您的位置:首页 > 运维架构 > 网站架构

网站开发中的相对URL问题--JSP

2014-04-02 20:10 295 查看
问题描述:
入门网站开发时,我们会在相对URL问题上有疑惑。例如,在一个jsp页面中引入css外部文件,
<link rel="stylesheet"
href="my-styles.css"
type="text/css" >
当我们直接访问时,页面正常显示,而有时候跳转到此页面,则出现css缺失的情况,这就是我想说的问题。

在分析问题之前,需要引入jsp中的两个知识点:跳转(forward)和重定向(redirect),如果你已了解相关知识,请直接阅读解决方案。
引入:
JSP或Servlet之间有两种相互调用方法,即跳转(forward)和重定向(redirect).
它们的实现方式分别是:
通过RequestDispatcher的forward方法实现跳转(你可以通过HttpServletRequest的getRequestDispatcher方法获得RequestDispatcher);
通过HttpServletRequest的sendRequest方法实现重定向;
区别:

重定向要求客户端(或浏览器)重新连接服务器,获取新资源(或页面),而跳转不需要;

重定向不会保存HttpServletRequest的信息,跳转保存;

重定向会使浏览器地址栏地址发生改变,而跳转保持原来的地址。

说白了,重定向是浏览器从服务器从新获取资源的过程,跳转是服务器内部页面之间相互调用的过程,与浏览器无关。

正因为此,页面中相对URL的相对起始目录会发生变化,举例来说,page_one.jsp调用page_two.jsp时,

重定向调用,页面的相对URL起始目录为page_two.jsp所在目录;

跳转调用,页面的相对URL起始目录为page_one.jsp所在目录;

如果页面中的相对URL如以上例子中的写法(href="my-style.css",表示css文件存在页面的起始目录中),因为页面的起始目录会发生变化,所以不管css文件放在何处,均可能出现资源不存在的情况。

解决方案:
这样的相对URL写法(href="my-style.css")表示css文件与
因为无法判断页面的访问方式是跳转还是重定向,所以我们应该以不变应万变,使不同的访问方式均能成功获取资源。
最简单的解决方案是:

将所有的jsp页面放在只有服务器才能访问的WEB-INF文件夹中;

使用起始目录为网站应用的相对URL,如下:

<link rel=stylesheet

<!-- 以斜杠"/"开始表示相对URL以网站应用为起始目录 -->

href="/path/my-styles.css"

type="text/css">

即可解决问题。
希望对你有所帮助!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: