JSP、Servlet中的相对路径和绝对路径
JSP和Servlet中的绝对路径和相对路径问题困扰了我好几天,经过努力之后将其部分心得和大家共享。
前提:假设你的Http地址为http://192.168.0.1/你的web应用为webapp,那么你的web应用URL为http://192.168.0.1/webapp/
web应用的目录结构:
webapp/
web-inf/
classes/
lib/
web.xml
<servlet-mapping>
<servlet-name>handleservlet</servlet-name>
<url-pattern>/handleservlet</url-pattern>此映射是相对于当前web应用的
</servlet-mapping>
user/
a.jsp
b.jsp
images/
css/
js/
所有相对路径都是由“/”开头的。如:/image/a.gif,/user/main.jsp,大家知道在html中的相对路径是这样的:
有个html文件:a.html,其中有<link href="one.css" rel="stylesheet" type="text/css">,其中href属性表示引用的css文件的路径。
one.css:表示one.css和a.hmtl处于同一个目录
user/one.css:表示one.css处于a.html所在目录的子目录user中。
../one.css:表示one.css位于a.hmtl上一级目录下,
../../one.css:表示one.css位于a.hmtl上一级目录的上一级目录下,
./:表示和a.hmtl同一目录
我们称上述相对路径为html相对路径
1、服务器端的地址
服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://192.168.0.1/webapp/的。
其用到的地方有:
forwarder:servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,所以,你要forwarder到a.jsp应该这么写:request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp,其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。
sendRedirect:在jsp中<%response.sendRedirect("/rtccp/user/a.jsp");%>
2、客户端的地址
所有的html中的相对地址都是相对于http://192.168.0.1/的,而不是http://192.168.0.1/webapp/的。
Html中的form表单的action属性的地址应该是相对于http://192.168.0.1/的,所以,如果提交到a.jsp为:action=”/webapp/user/a.jsp”;提交到servlet为action=”/webapp/handleservlet”
Javascript也是在客户端解析的,所以其相对路径和form表单一样。
3、站点根目录和css路径问题
我们称类似这样的相对路径/webapp/….为相对于站点根目录的相对路径。
当在jsp中引入css时,如果其相对路径相对于当前jsp文件的,而在一个和这个jsp的路径不一样的servlet中forwarder这个jsp时,就会发现这个css样式根本没有起作用。这是因为在servlet中转发时css的路径就是相对于这个servlet的相对路径而非jsp的路径了。所以这时候不能在jsp中用这样的路径:<link href="one.css" rel="stylesheet" type="text/css">或者<link href="../../one.css" rel="stylesheet" type="text/css">类似href="one.css"和../../one.css的html相对路径是相对于引用这个css的文件的相对路径。而在servlet中转发时就是相对于这个servlet的相对路径了,因为jsp路径和servlet路径是不一样的,所以这样的引用肯定是出错的。
所以这个时候,要用站点根目录,就是相对于http://192.168.0.1/的目录,以“/”开头。
因此上述错误应更正为href=”/webapp/one.css”类似的站点根目录的相对目录。这样在servlet转发后和jsp中都是相对于站点根目录的相对路径,就能正确使用所定义的css样式了。
分享到:
相关推荐
html路径问题 html路径问题 html路径问题 html路径问题
用贪心算法解单源最短路径问题 明确单源最短路径问题的概念;利用贪心算法解决单源最短路径问题;并通过本例熟悉贪心算法在程序设计中的应用方法。
JAVA版动态规划解决最短路径问题 啊
lingo解最短路径问题。城市之间线路及距离已知。从某个城市出发,到达目的城市,通过lingo编程选取最短路径。
VRPSPDTW问题,带时间窗和同时取送货的车辆路径问题,具有相同类型的车辆从配送中心出发,对其确定的客户集进行服务,完成后返回配送中心+含代码操作演示视频 运行注意事项:使用matlab2021a或者更高版本测试,运行...
车辆路径问题的混合遗传粒子群算法.docx车辆路径问题的混合遗传粒子群算法.docx车辆路径问题的混合遗传粒子群算法.docx车辆路径问题的混合遗传粒子群算法.docx车辆路径问题的混合遗传粒子群算法.docx车辆路径问题的...
多段图的最短路径问题 多段图的最短路径问题
C# DllImport用法和路径问题 .docx,详细介绍了DllImport的用法,希望会对大家有帮助
本文以深度强化学习为基础,设计出一种适用于求解大规模车辆路径问题的模型架 构。采用了预训练模型+基于相对位置的 Transformer网络+A2C强化学习训练框架,为 后续研究大规模车辆路径问题的扩展问题和大规模组合...
针对多配送中心的动态启用与车辆的合理分配,建立了以总路径长度最小为目标函数的多配送中心车辆路径问题的数学模型,根据多配送中心车辆路径问题的具体特征,模拟狼群捕食行为设计了求解该问题的狼群算法。...
WPF中Image控件Source属性的相对路径和绝对路径问题的开发经验总结,亲测通过!
最短路径问题 大一数据结构最短路径问题
最短路径问题; 设计一个C程序,实现求解单源点最短路径问题;
MATLAB实现利用cplex小规模的车辆路径问题,不适用于大规模问题的求解。
研究了带时间窗的车辆路径问题(Vehicle Routing Problem with Time Windows,VRPTW),建立了数学模型,并设计了求解VRPTW的离散差分进化混合算法。算法采用随机车辆配载方法构造初始解,并通过构造新的变异和交叉...
公交车最短路径问题 数据结构 C++
论文研究-求解带时间窗车辆路径问题的插入检测法.pdf, 在求解带时间窗车辆路径问题各类算法的插入检测过程中, 针对已有检测时间窗口约束是否满足的方法存在效率不高的...
这个问题通常称为单源最短路径问题. 输入: 第一行为一个整数n,表示包含源在内的顶点的个数,接下来是一个n*n的矩阵,矩阵中-1表示此路不通,否则表示从该顶点到另一顶点的距离。例如对于上图所示的问题我们可以按...
lingo教程VRP代码,可直接运行,方便使用 ,车辆路径 问题
带时间窗车辆路径问题及其启发式算法研究,软时间窗问题