问题描述:

入门网站开发时,我们会在相对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. Node.js Cannot find Module xxx 的问题

    不知道为什么第一天Node.js干的挺顺利的,回公司后就干的一点都不顺利,主要原因还是公司的网络的问题,使用的受限制的代理,不能直接使用NPM从远程下载模块,唉. node.js的模块加载顺序首先是从 ...

  2. 【原】在一般处理程序中设置session

    using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using Syste ...

  3. 解决 windows2012 下无法安装 sql2008R2

    Press the Windows logo key, type control panel, and then click the Control Panel icon. Note If you a ...

  4. Linux下crontab详解

    1.crond介绍 crond是Linux下的任务调度命令,让系统定期执行指定程序.crond命令每分钟都会检查是否有要执行的工作,若有要执行的程序便会自动执行. linux下任务调度工作主要分两类: ...

  5. iOS 的 Gif 渲染引擎 FLAnimatedImage-b

    公司的项目有个首页加载一张2M左右的git图,刚做的时候是使用的SDWebImage里面的方法: + (UIImage *)sd_animatedGIFNamed:(NSString *)name; ...

  6. Contest2037 - CSU Monthly 2013 Oct (problem F :ZZY and his little friends)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?cid=2037&pid=5 [题解]: 没想通这题暴力可以过.... [code]: #inclu ...

  7. hibernate简介(Session,几种状态,方法······等)

    1.Hibernate是什么?          Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数 ...

  8. ASP.NET遍历textbox文本框

    Asp.Net如何遍历所有TextBox控件并清空 asp.net 不能像window那样直接遍历this.Controls就可以了,因为: this.Controls只是包含了Page根一级的con ...

  9. OD之窗口界面

  10. cf 320B

    数据量小  dfs水过 #include <iostream> #include <cstdio> #include <cstring> using namespa ...