1、基本概念的理解

绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:\xyz\test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。

相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),

在项目中,"/"代表Web站点的根目录,"./"代表当前目录, "../"代表上级目录, http://www.cnblogs.com/代表上上级目录,以此类推。

例如:C:\test\AC\下面有a.html和c.html, C:\test\B\下面有b.html,则在a.htm中访问b.html绝对路径为C:\test\B\b.html,相对路径为../B/b.html;访问c.html绝对路径为C:\test\AC\c.html,相对路径为./c.html或者c.html。

2、关于JSP/Servlet中的相对路径和绝对路径。

2.1 服务器端的地址

服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://172.0.0.1/TestProject/的。

其用到的地方有:

forward:servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,所以,你要forward到error.jsp应该这么写:

request.getRequestDispatcher(“pages/error.jsp”),这个/相对于当前的web应用TestProject,其绝对地址就是:

在Servlet中,如果要访问WEB-INF下面的jsp页面时,必须加上/WEB-INF这个路径,因为Servlet的路径是相对服务器端地址的,即http://172.0.0.1/TestProject/,例如:request.getRequestDispatcher("/WEB-INF/content/student-detail.jsp")

2.2客户端的地址

所有的html页面中的相对地址都是相对于服务器根目录(http://172.0.0.1/)的,而不是(跟目录下的该Web应用的目录)http://172.0.0.1/TestProject/的。 Html中的form表单的action属性的地址应该是相对于服务器根目录(http://172.0.0.1/)的,所以,如果提交到error.jsp为:action="/pages/error.jsp”;提交到servlet为action="/handleservlet"; Javascript也是在客户端解析的,所以其相对路径和form表单一样。

因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上,以确保所引用的文件都属于Web应用中的目录。另外,应该尽量避免使用类似".","./","http://www.cnblogs.com/"等类似的相对该文件位置的相对路径,因为这样当文件移动时,很容易出问题。

2.3站点根目录和系统目录

站点根目录:在Web项目中“/”是表示站点根目录的相对路径,例如在jsp页面中引入

,style.css和common.js的路径分别为http://172.0.0.1/css/style.css和(http://172.0.0.1/js/common.js。因为/css/….是相对于站点根目录的相对路径。这样jsp是无法访问到css或js文件的。

系统目录:众所周知,JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例——JSP页面由系统编译成Servlet,Servlet再负责响应用户请求。JSP其实也是Servlet的一种简化,使用JSP时,其实还是使用Servlet,因为Web应用中的每个JSP页面都会由Servlet容器生成对应的Servlet。也就说jsp所在的目录还是服务端目录,

3、在JSP中引用js/css/的两种方式

第一种:站点根目录下绝对路径的方式

为了在以后更改工程名时也能正确访问,我们需要加

如:

写太麻烦,可以在每一个jsp文件顶部加入以下内容后,

Java代码

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

就可直接使用 了。

第二种:系统根目录下相对路径的访问方式

当在jsp中引入css/js时,如果其相对路径相对于当前jsp文件的,而当前的jsp的相对路径又是相对于系统目录http://172.0.0.1/TestProject/的。

所以在上面的引入方式中去掉“/”即可。即。在jsp页面引入图片也是如此。如果一定要使用站点根目录的话就这样使用,这两种方式都是可以的。

4、在Servlet/Action中跳转到相应的Jsp页面的方式

第一种情况:假如jsp页面是可以直接访问到的,即是放在WEB-INF外面的,假设该jsp页面访问地址为http://172.0.0.1/TestProject/pages/test.jsp。则Servlet中通过request.getRequestDispatcher("/pages/test.jsp").forward(request, response)这种方式即可跳转到test.jsp。

第二种情况:假如该jsp页面是不可以直接访问的,是在WEB-INF里面的。假设该jsp页面所在的目录为http://172.0.0.1/TestProject/WEB-INF/content/student-list.jsp。则Servlet中通过request.getRequestDispatcher("/WEB-INF/content/student-list.jsp").forward(request, response)跳转。在Struts2中通过配置/content/student-list.jsp即可访问。

5、Forward、Redirect及Include的区别

首先,sendRedirect与forward,include的最大区别是request,response. sendRedirect产生新的请求与响应,服务器收到请求后发送一个状态头给客户,客户将再次请求,就有两次网络通行的来往。redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response.所以redirect可以重定向到外部的资源,如:response.sendRedriect("http://www.baidu.com"); 当Servlet发送“http://www.baidu.com”到服务器时,服务器再将该地址返回客户端,此时浏览器URL为“http://www.baidu.com”,然后客户端再去访问“http://www.baidu.com”这个地址。

其次,forward与include基本上都是转发到context内部的资源。它们是服务器内部重定向,程序接收到请求后重新定向到另一个程序,而客户端并不知晓。从地址栏显示来说forward与include是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容

再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.forward与include会将 request state、bean、等信息带到下一个jsp页面;

使用getAttribute()来取得前一个jsp所放的信息,redirect 是送到客户端后再次request,因此上一个jsp的信息不被保留。

最后,forward与include的区别就是,forward方法是把请求的内容转发到另外的一个servlet。而include是把另一个servlet处理过后的内容拿过来.

使用方式:

1.sendRedirect

servlet和jsp里面一样

response.sendRedirect();

2.include

1) servlet里面

request.getRequestDispatcher( "jsp2.jsp" ).include(request, response);

2) jsp里面

3. forword

1) servlet里面

request.getRequestDispatcher( "jsp2.jsp" ).forward(request, response);

2) jsp里面

java web jsp相对路径_Java Web中的相对路径与绝对路径总结相关推荐

  1. java css路径_java web开发中CSS路径有问题吗,运行jsp文件为什么找不到css文件?...

    ---------------------------------------------------------------------------------------------------- ...

  2. java工程编辑器中文乱码_Java Web开发项目中中文乱码解决方法汇总

    Java Web项目中,解决中文乱码方法总结如下 第一种情况:调用jsp页面中文显示乱码问题描述:通过浏览器调用jsp页面,在浏览器中显示的中文内容出现乱码. 解决方法:首先确认本jsp在编辑器中保存 ...

  3. java图片上传下载_java web 文件上传与下载

    组件工作流程:WEB服务器request ServletFil eupLoad DiskFileItem Factory代表普通字段的FileItem代表上传文件1FileItem代表上传文件2Fil ...

  4. java 当前类相对路径_JAVA文件中获取该项目的相对路径方法

    1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://www ...

  5. #java #web jsp开发入门(web应用概述、tomcat简介、编写步骤)

    #java #web jsp开发入门与编写步骤(web应用概述.tomcat简介.编写步骤) 目录 #java #web jsp开发入门与编写步骤(web应用概述.tomcat简介.编写步骤) 1.w ...

  6. java编程中相对路径怎么写_Java编程中的绝对路经和相对路径

    1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:xyz est.txt 代表了test.txt文件的绝对路径.相对路径:相对与某个基 ...

  7. java项目使用过滤器实例_Java web开发--过滤器篇(详细介绍)

    一. web过滤器的介绍 1.过滤器 在生活中,过滤这种我们时常可见:比如水资源的处理,化学药剂的提取等等.所谓过滤,就是指对某事物的处理进行一定的处理获取相应的结果的一个过程.它可以总结为下: 过滤 ...

  8. Java Web开发与实战_Java Web开发技术与实战项目

    [实例简介] 北大青鸟ACCP6.0 使用JSP/Servlet/Ajax技术开发新闻发布系统第一部分课件以及代码答案1到6章 [实例截图] [核心代码] 7.<JavaWeb开发技术> ...

  9. java web学什么软件_java web开发是什么?该怎么学习?

    Java中有前端这个开发方向,上回我们说到了javaweb是什么?你们应该对javaweb有了一定的了解了,那你们知道该如何学习web吗?小编这里整理了一些相关知识,快来看看吧. 一.javaweb是 ...

最新文章

  1. multi-CPU, multi-core and hyper-thread--转
  2. 学习笔记 Keras:基于Python的深度学习库
  3. leaflet大量marker卡顿_leaflet如何加载10万数据
  4. Redis 主从集群搭建及哨兵模式配置
  5. PAT (Advanced Level) 1007 Maximum Subsequence Sum(最大连续子段和)
  6. signature=1610c03482e0c6557f7ec99f0ceeae85,Vpdes Permit No. Va006557
  7. php 自制建议神马收录查询工具
  8. python整型图_基于PIL的图像整形与裁剪矢量化
  9. 462.最少移动次数使数组元素相等II
  10. python笔记记录神器 jupyter notebook
  11. Intellij Idea更换编程字体
  12. 实验二:递归下降语法分析
  13. 【python实战】二:乒乓球比赛对手问题
  14. 从投入产出简析直复营销
  15. 解决外边距坍塌的几种方法
  16. 软考查缺补漏?这篇《软件知识产权基础知识考点整理》了解一下?
  17. 如何做一份适用的定向地图
  18. Vue3.0手脚架搭建
  19. 皮尔森相关性系数的计算python代码(四)(热力图版)
  20. 天刀服务器维护时间,《天涯明月刀》2021年3月10日服务器例行维护公告 服务器例行维护怎么样...

热门文章

  1. 预训练模型需要知道的知识点总结,万字长文带你深入学习(建议收藏)
  2. Linux从入门到精通系列之SHELL编程循环语句语法及实例详解(forwhileuntil)
  3. 机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting
  4. python实现自动发送微博,当自己写博客时同步上去。
  5. K折交叉验证(StratifiedKFold与KFold比较)
  6. 【Python刷题】_8
  7. 【c#】24点游戏的实现(可存档且局域网互联)
  8. 会计的疑惑--BigDecimal的秘密
  9. 信用评分卡模型的理论准备
  10. php实现socket编程