Web开发中的路径问题总结
原文地址:http://zzqrj.iteye.com/blog/806909
路径问题在Web开发中算是令人比较蛋疼的问题,尤其是用相对地址时,同样的代码,在不同的目录结构中竟然会出现有对有错的结果,让人茫然不知所措。这种错误,究其原因,还是对Web中路径的概念一知半解,为彻底避免这种错误,提高开发效率,这里对Web中路径问题稍作总结。
1. 服务器端的相对地址
是在服务器端解析的,是相对于web应用的地址
servlet中的相对地址应该是相对于web应用,即相对于http://localhost:8080/webapp/
2. 重定向的路径问题
forward跳转: servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,
所以,要forward到a.jsp应该这么写: request.getRequestDispatcher("/user/a.jsp")这个/相对于当前的web应用webapp, 其绝对地址就是:http://
localhost:8080 /webapp/user/a.jsp
sendRedirect跳转: response.sendRedirect(address);这个address是在客户端解析的,要跳转到a.jsp,应该这么写:response.sendRedirect("/webapp/user/a.jsp");
3. 客户端的相对地址
所有的html中的相对地址都是相对于http://
localhost:8080 / 的,而不是http:// localhost:8080 /webapp/ 的。
Html中的form表单的action属性的地址应该是相对于http://
localhost:8080 / 的。
所以,如果提交到a.jsp为:action="/webapp/user/a.jsp";提交到servlet为action="/webapp/handleservlet"
Javascript也是在客户端解析的,所以其相对路径和form表单一样。
4. 两种相对路径
相对于根目录的路径:
/jsp/path/pathTest.jsp
在服务器端解析为绝对路径为:http://localhost:8080/webapp/jsp/path/pathTest.jsp
在客户端解析为的绝对路径为:http://localhost:8080/jsp/path/pathTest.jsp
相对于当前目录的路径:
jsp/path/pathTest.jsp
当前目录的路径为http://localhost:8080/webapp/jsp/path ,
那么绝对路径为:http://localhost:8080/webapp/jsp/path/jsp/path/pathTest.jsp
5. 站点根目录和css路径问题
当在jsp中引入css时,如果其相对路径相对于当前jsp文件的,会正常找到相应的css
但是如果从一个和当前jsp的路径不一样的Servlet中forward到这个jsp时,当前的相对路径是哪个Servlet的相对路径,而不是jsp所在的路径,这时不能在jsp中用这样的路径:<link href="css.css" rel="stylesheet" type="text/css">或者<link href="../../css.css" rel="stylesheet" type="text/css">。
这中情况下,要用站点根目录来引用css文件,就是相对于http://ip/ 的目录,以"/"开头,即href="/webapp/css.css"。这样在servlet转发后和jsp中都是相对于站点根目录的相对路径,就能正确使用所定义的css样式了。
也可以理解为在客户端(jsp/html文件中),引用文件时,都要用/wabapp/***开头,因为客户端的相对地址是http://localhost:8080/
6. servlet中几个获取路径方法的对比
对于url: http://localhost:8080/webapp/blog/list
那么分别调用request.getContextPath( )、request.getServletPath( ) 、 request.getURI( )、request.getURL( )分别返回什么路径?
这几个方法都是在HttpServletRequest接口中定义的。
1). request.getContextPath( )返回web应用程序的路径,上例中该方法将返回/webapp;
2). request.getServletPath( ) 返回Servlet的路径。上例中该方法将返回/blog/list;
3). request.getRequestURL( )返回请求的URL,上例中即为http://localhost:8080/webapp/blog/list ;
4). request.getRequestURI( )返回HTTP请求行中请求URI的部分。上例中该方法将返回/webapp/blog/list
Web开发中的路径问题总结的更多相关文章
- web开发中目录路径问题的解决
web开发当中,目录路径的书写是再常用不过了,一般情况下不会出什么问题,但是有些时候出现了问题却一直感到奇怪,所以这里记录一下,彻底解决web开发中路径的问题,开发分为前端和服务端,那么就从这两个方面 ...
- web开发中的路径问题
http://www.cnblogs.com/tianguook/archive/2012/08/31/2665755.html 转自:http://www.blogjava.net/meil/arc ...
- Java Web开发中路径问题小结
Java Web开发中,路径问题是个挺麻烦的问题,本文小结了几个常见的路径问题,希望能对各位读者有所帮助. (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 ...
- Java Web 开发中路径相关问题小结
Java Web开发中路径问题小结 (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 Eclipse中目录结构如图2所示: 图2 那么针对这个站点的几个基本概 ...
- Web开发中的相对路径和绝对路径
在学习HTML的时候一定会遇到引入文件和链接跳转页面,比如:JS文件.CSS文件.Image图片.我们就会考虑是相对路径和绝对路径的问题.下面PHP程序员雷雪松就详细讲解下Web开发中的相对路径和绝对 ...
- Java Web开发中路径问题小结(getRequestUrl getContextUrl getServletUrl)
看以博客感觉不错,分享一下http://www.cnblogs.com/tianguook/archive/2012/08/31/2665755.html (1) Web开发中路径的几个基本概念 假设 ...
- 关于web开发中路径的问题的总结
web开发中的一个困扰web开发新人的是路径问题: 1:项目的静态资源的根路径:http://localhost:8080/sqec-monitor 即是部署在web服务器中(比如tomcat)中项目 ...
- 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践
提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...
- JAVA WEB项目中各种路径的获取
JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报 分类: JAVA开发(41) 1.可以在s ...
随机推荐
- poj 2541 Binary Witch
Binary Witch http://poj.org/problem?id=2541 Time Limit: 1000MS Memory Limit: 65536K Descript ...
- 简易微信小程序签到功能
一.效果图 点击签到后 二.数据库 用一张数据表存用户签到的信息,每次用户签到都会往表中添加一条记录了用户id和签到日期的数据,如下图 三.后端 后端写两个接口,一个用于查询用户今日是否签到和签到记录 ...
- bzoj 1006 MCS算法
根据陈丹琪的论文弦图与区间图,求出弦图的完美消除序列之后,反向给每个点染可以染的最小的颜色,这样可以使用最少的颜色染色,染色的方案即为队伍数. 那么我们需要求该图的完美消除序列,使用MCS算法,从后向 ...
- 【转】debian下的update-rc.d的使用
在Linux系统下,一个Services的启动.停止以及重启通常是通过/etc/init.d目录下的脚本来控制的.然而,在启动或改变运行级别时, 是在/etc/rcX.d中来搜索脚本.其中X是运行级别 ...
- 禁用 Cortana 的解决办法
1. GPedit.msc 2. 然后在本地组策略编辑器中,点击“用户配置”中的“管理模版”,接着双击右侧的“Windows 组件”. 3. 下拉滚动条,并找到“文件资源管理器”,双击进入. 找到“在 ...
- python基础===jieba模块,Python 中文分词组件
api参考地址:https://github.com/fxsjy/jieba/blob/master/README.md 安装自行百度 基本用法: import jieba #全模式 word = j ...
- centos rar 文件打开办法
http://hi.baidu.com/nmxiaoxin/item/7642a139918a95677d034b6a Centos下解压rar.zip文件的方法 ============zip文件的 ...
- 2017多校第8场 HDU 6133 Army Formations 线段树合并
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6133 题意:给你一棵n个节点的二叉树,每个节点有一个提交任务的时间,每个节点总的提交任务的罚时为:提交 ...
- TensorFlow计算模型—计算图
TensorFlow是一个通过计算图的形式来表述计算的编程系统.其中的Tnesor,代表它的数据结构,而Flow代表它的计算模型.TensorFlow中的每一个计算都是计算图上的一个节点,而节点之间的 ...
- [ python ] 类的组合
首先,使用面向对象是一个人狗大战的实例: class Person: def __init__(self, name, hp, aggr, sex): self.name = name self.hp ...