问题描述:

入门网站开发时,我们会在相对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方法实现重定向;
区别:
  1. 重定向要求客户端(或浏览器)重新连接服务器,获取新资源(或页面),而跳转不需要;
  2. 重定向不会保存HttpServletRequest的信息,跳转保存;
  3. 重定向会使浏览器地址栏地址发生改变,而跳转保持原来的地址。
说白了,重定向是浏览器从服务器从新获取资源的过程,跳转是服务器内部页面之间相互调用的过程,与浏览器无关。
正因为此,页面中相对URL的相对起始目录会发生变化,举例来说,page_one.jsp调用page_two.jsp时,
  1. 重定向调用,页面的相对URL起始目录为page_two.jsp所在目录;
  2. 跳转调用,页面的相对URL起始目录为page_one.jsp所在目录;
 
如果页面中的相对URL如以上例子中的写法(href="my-style.css",表示css文件存在页面的起始目录中),因为页面的起始目录会发生变化,所以不管css文件放在何处,均可能出现资源不存在的情况。
 
解决方案:
这样的相对URL写法(href="my-style.css")表示css文件与
因为无法判断页面的访问方式是跳转还是重定向,所以我们应该以不变应万变,使不同的访问方式均能成功获取资源。
最简单的解决方案是:
  1. 将所有的jsp页面放在只有服务器才能访问的WEB-INF文件夹中;
  2. 使用起始目录为网站应用的相对URL,如下:
    <link rel=stylesheet
             <!-- 以斜杠"/"开始表示相对URL以网站应用为起始目录 -->
             href="/path/my-styles.css"
             type="text/css">
即可解决问题。
希望对你有所帮助!

网站开发中的相对URL问题--JSP的更多相关文章

  1. 网站开发中很实用的 HTML5 & jQuery 插件

    这篇文章挑选了15款在网站开发中很实用的 HTML5 & jQuery 插件,如果你正在寻找能优化网站,使其更具创造力和视觉冲击,那么本文正是你需要的.这些优秀的 jQuery 插件能为你的网 ...

  2. 整合Spring.net到asp.net网站开发中初探

    整合Spring.net到asp.net网站开发中初探 http://www.veryhuo.com 2009-10-21 烈火网 投递稿件 我有话说   Spring提供了一个轻量级的用于构建企业级 ...

  3. 网站开发中使用javascript获取浏览器滚动条宽度

    在网站开发中,有时候需要获取浏览器滚动条的宽度,在武汉蚂蹄软件服务中心的技术人员指导之下,我实现了该需求.记录如下: 首先说明一下原理: ①生成一个div,设置滚动条不可见,记录其宽度: ②将上面的d ...

  4. ASP.NET网站开发中的配置文件

    来源:微信公众号CodeL 1.配置文件层次分类 Machine.config:  对.netframework整体的配置 web.config(framework目录下):  对所有项目所公有的应用 ...

  5. 我在网站开发中经常用到的几个js函数01

    这是我在最近的一个网站项目中频繁用到的几个js函数,非常实用.包括:1.js获取地址栏参数:2.返回cookies字符串中指定键对应的值:3.json格式的日期转换为正常格式4.清除cookie. / ...

  6. 浅析网站开发中的 meta 标签的作用

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  7. 在网站开发中很有用的8个 jQuery 效果【附源码】

    jQuery 作为最优秀 JavaScript 库之一,改变了很多人编写 JavaScript 的方式.它简化了 HTML 文档遍历,事件处理,动画和 Ajax 交互,而且有成千上万的成熟 jQuer ...

  8. 在access中如何创建数据库。你认为数据库在网站开发中所扮演的角色是什么。使用数据库和使用文件,两者的优缺点各是什么。

    首先在access里面填写所用的信息,将数据库创建,在导入程序设计里进行完成代码. 首先打开我们的access程序,打开方法是单击开始——所有程序. 所有程序中找到microsoft office文件 ...

  9. 在网站开发中经常用到的javaScript技术

     1>屏蔽功能类 1.1 屏蔽键盘所有键<script language="javascript"><!--function document.onkeyd ...

随机推荐

  1. PHP版3DES加解密类

    <?php /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author:蓝凤(ilanfeng.com) * * @versio ...

  2. 另一个 SqlParameterCollection 中已包含 SqlParameter

    出处:http://www.cnblogs.com/OldYongs/archive/2011/03/12/1982021.html#2742742 一般情况下,我们定义的一个SqlParameter ...

  3. ios实现截屏(转)

    -(UIImage*) makeImage {  UIGraphicsBeginImageContext(self.view.bounds.size);  [self.view.layer rende ...

  4. 如何修改SVN中的用户名和密码

    删除掉C:\Users\Administrator\Application Data\Subversion\auth\svn.simple文件夹下的文件即可.再次访问时,会弹出要求输入用户名和密码. ...

  5. 结构体 typedef关键字

    1 结构体 #include <iostream> #include <cstring> using namespace std; void printBook( struct ...

  6. 使用Flexbox实现CSS竖向居中

    竖向居中需要一个父元素和一个子元素合作完成. <div class="flexbox-container"> <div>Blah blah</div& ...

  7. [转载]获取当前日期和农历的js代码

    原文地址: http://www.cnblogs.com/Gnepner/archive/2011/09/07/2169822.html 获取当前日期时间: function GetCurrentDa ...

  8. 破解之寻找OEP[手动脱壳](2)

    1.使用ESP定律 OD载入后,F8一次,在寄存器窗口的ESP的内容上(如0012FFA4)右键:“在数据窗口中跟随”,到内存数据窗口,将内存数据窗口以HEX 数据形式显示,在刚才的地址起始位置上(如 ...

  9. WPF SplitButton 的杂七杂八

    原文: http://www.codeproject.com/Articles/20612/A-WPF-SplitButton SplitButton.cs using System; using S ...

  10. spoj 379

    题是水题  但丫的题目意思太难懂 .......   英语水平  ...... #include <cstdio> #include <cstring> #include &l ...