WEBAPP开发教程JSP、Servlet中的相对路径和绝对路径(包括路径问题)
凌雪 2018-11-08 来源 :网络 阅读 1070 评论 0

摘要:本文将带你了解WEBAPP开发教程JSP、Servlet中的相对路径和绝对路径(包括路径问题),希望本文对大家学WEBAPP有所帮助。

本文将带你了解WEBAPP开发教程JSP、Servlet中的相对路径和绝对路径(包括路径问题),希望本文对大家学WEBAPP有所帮助。


 前提:假设你的 Http 地址为   //192.168.0.1/ 你的   web 应用为 webapp ,那么你的 web 应用 URL 为   //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 应用,即相对于   //192.168.0.1/webapp/ 的。 其用到的地方有:   forwarder : servlet 中的   request.getRequestDispatcher(address); 这个 address 是在服务器端解析的,所以,你要 forwarder 到 a.jsp 应该这么写: request.getRequestDispatcher(“/user/a.jsp”) 这个 / 相对于当前的 web 应用   webapp ,其绝对地址就是:   //192.168.0.1/webapp/user/a.jsp 。 sendRedirect :在 jsp 中   <%response.sendRedirect("/rtccp/user/a.jsp");%> 2、 客户端的地址 所有的 html   中的相对地址都是相对于   //192.168.0.1/ 的,而不是   //192.168.0.1/webapp/ 的。 Html 中的   form 表单的 action 属性的地址应该是相对于 //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 路径是不一样的,所以这样的引用肯定是出错的。 所以这个时候,要用站点根目录,就是相对于 //192.168.0.1/ 的目录,以“ / ”开头。 因此上述错误应更正为 href=”/webapp/one.css” 类似的站点根目录的相对目录。这样在 servlet 转发后和 jsp 中都是相对于站点根目录的相对路径,就能正确使用所定义的 css 样式了。   =================================================================== 在jsp中经常会遇到路径的问题,出现404的错误或者是图片无法显示. 这个问题可以从以下几个方面来解决:       1 链接或表单提交的路径       2 重定向和转发的路径     3 在MyEclipse有jsp的两种模板advanced 和 base Templates的路径问题 以下为解决之道 1 表单提交和链接都是从客户端请求请求而来   /指的Tomcat的根目录,写绝对路径应该写成"/当前Web程序根名称/资源名" 如"/WebModule1/jsp1.jsp","/bbs/servlet/MyServlet"   2 重定向和转发的路径问题   写相对路径重定向和转发没有区别     重定向response.sendRedirect("")是服务器向客户端发送一个请求头信息,由客户端再请求一次服务器.因此情况同上述1的一样,   转发是在服务器内部进行的,写绝对路径/开头指的是当前的Web应用程序.绝对路径写法就是"/jsp1.jsp"或"/servlet/MyServlet"     总结:以上两点要注意是区分是从服务器外的请求,还在是内部转发,从服务器外的请求,从Tomcat根写起(就是要包括当前Web的根),是服务器内部的转发,很简单了,因为在当前服务器内,/写起指的就是当前Web的根. 3 在MyEclispe中的JSP的两种模板,一种是Advanced,一种是Basic   两者的区别也会涉及到路径问题,如图片的路径,链接的路径     Advanced Template中页面的代码多了以下代码:   <%       String path =   request.getContextPath();       String basePath =   request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";     %>    <base href="<%=basePath%>"> 其中<base   href="<%=basePath%>">必须放在<head></head>中 这段代码的作用是设置基础路径的,basepath为变量.<base href="">标签的用处是解决编程时候的相对路径问题. 设置了<base   href="<%=basePath%>"> 页面上图片,链接的路径指的都是当前应用程序的根路径下. 当然,这个base还有一个用法,如在head部分加上这么一行: <base   href="_blank"> ,就是默认所有链接在新窗口打开。
     

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之WebApp频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程