以往一直没注意javaweb中的相对路径和绝对路径问题,有时有问题了,才想起去看看是否是路径的问题,一直对路径问题都是一知半解。今天就姑且记录一下,毕竟事如春梦了无痕嘛,倘不记之笔墨,未免有辜彼苍之厚。

对于一个URL地址,我们在编码的时候不会去这样写http://localhost/TestProject/registerUserServlet

大多只会在form表单的提交路径中写上registerUserServlet或者/TestProject/registerUserServlet

如此这般。

那其实这两种写法效果是一样的,只是前者叫做相对路径或者叫做绝对路径

  • 相对路径:以./开头,可以省略
  • 绝对路径:以/开头

我们先来看相对路径,只要搞清楚当前资源与目标资源之间的相对关系,相对路径是非常容易的。

我们通过举例来说明。

我们建立一个javawebl类型的项目

web文件夹下我们新建一个location.html文件

<body>
<h1>相对路径</h1>
<h1>找到当前资源和目标资源之间的相对位置关系</h1>
<P>
当前资源:location.html
http://localhost/day15/location.html
</P>
<P>
目标资源:
http://localhost/day15/responseDemo
</P>
<a href="./responseDemo">
responseDemo2
</a>
<a href="responseDemo">
responseDemo2
</a>

src/com/helius/servelt文件夹下新建一个responseDemo的servlet类,来处理location.html

中的响应。

那此时采用上图中的两种写法都是可以的,因为相对路径中的./可以省略。

分析:当我们打开浏览器,准备访问这个html文件,我们访问的路径是什么呢?

显然是 http://localhost/day15/location.html

day15我们称为虚拟目录,虚拟目录可以在idea中的启动的tomcat中配置。

也就是apache-tomcat-7.0.94\conf\server.xml中配置的Context标签

<Context path="/day15" docBase="c:\work_folder" />

另外这个文件是在web目录下的,也就是项目根目录

所以得出它的访问路径 http://localhost/day15/location.html

再来看responseDemo这个从哪里来的呢,当然是我们在web.xml中配置的

<servlet>
<servlet-name>ResponseDemo</servlet-name>
<servlet-class>ResponseDemoServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>ResponseDemo</servlet-name>
<url-pattern>/responseDemo</url-pattern>
</servlet-mapping>

注:Servlet3.0可以直接通过注解进行配置

所以当我们请求这个类的路径就是http://localhost/day15/responseDemo

将两个路径比较一下,使用相对路径可以通过href="responseDemo"进行访问。


再来看绝对路径

绝对路径要分两种情况了,需要判断定义的路径是给谁用的?判断请求从哪里发出?

  • 给客户端使用:需要加虚拟目录

    • <a>标签,<form>标签、重定向
  • 给服务端使用:不需要加虚拟目录
    • 转发

再来看用绝对路径怎么改写上个例子

    <h1>绝对路径</h1>

    <a href="/day15/responseDemo">
responseDemo2
</a>

绝对路径以/开头,显然,这个超链接肯定是通过用户点击,也即是客户端使用,请求也由客户端发出,所以需要加上虚拟目录day15

同理,我们可以思考,哪些是客户端发出的请求呢?

比如使用

  1. form表单进行提交
  2. 点击超连接
  3. 重定向:切记重定向是客户端行为,

哪些是服务端行为呢?

比较常见的就是转发操作

Tips:如果动态获取虚拟目录

request.getContextPath()

好吧,这次记录的比较简洁,希望这次不会再忘记了。

java web中的相对路径和绝对路径的更多相关文章

  1. java web中读取properties文件时的路径问题

    在web开发时,难免会有一些固定的参数,我们一般把这些固定的参数存在properties文件中,然后用的时候要读出来.但经常出现一些错误,找不到相应的路径,所以,今天特地讲一些如何正确获得路径. 首先 ...

  2. java web中servlet、jsp、html 互相访问的路径问题

    java web中servlet.jsp.html 互相访问的路径问题 在java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. java web中的路径使用按我的分法可 ...

  3. java web中路径问题。

    转自:http://blog.csdn.net/liang5630/article/details/38474543 如有侵权,请及时联系本人及时删除 在java web种经常出现 404找不到网页的 ...

  4. Java web中常见编码乱码问题(一)

    最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...

  5. Java Web 中使用ffmpeg实现视频转码、视频截图

    Java Web 中使用ffmpeg实现视频转码.视频截图 转载自:[ http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html  ...

  6. Java Web 中 过滤器与拦截器的区别

    过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...

  7. JAVA WEB 中的编码分析

    JAVA WEB 中的编码分析 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src {background-co ...

  8. Java web中常见编码乱码问题(二)

    根据上篇记录Java web中常见编码乱码问题(一), 接着记录乱码案例: 案例分析:   2.输出流写入内容或者输入流读取内容时乱码(内容中有中文) 原因分析: a. 如果是按字节写入或读取时乱码, ...

  9. 深入分析Java Web中的编码问题

    编码问题一直困扰着我,每次遇到乱码或者编码问题,网上一查,问题解决了,但是实际的原理并没有搞懂,每次遇到,都是什么头疼. 决定彻彻底底的一次性解决编码问题. 1.为什么要编码 计算机的基本单元是字节, ...

  10. 解决java web中safari浏览器下载后文件中文乱码问题

    解决java web中safari浏览器下载后文件中文乱码问题 String fileName = "测试文件.doc"; String userAgent = request.g ...

随机推荐

  1. xshell连接不上阿里云服务器Could not connect to 'ip' (port 22): Connection failed.解决过程

    记一次xshell阿里云服务器突然连接不上的解决办法: 1, 确认阿里云服务器安全组出入都有22,百度出来都说的这个和ip拦截设置,以防万一都设置了:但楼主设置后,还是连不上服务器: 只好下一步 2, ...

  2. 讨论---MySQL数据库中null、''、' '区别

    今天在写代码的时候,遇到了一个关于MySQL数据库的问题,发现在表中插入‘’数据的时候插入不进去.发现这张表中的数据没有数据的时候,默认显示的null,当时自己又重复的额试了几次,但是始终没有成功,从 ...

  3. SpringBoot学习(五)RSocket和Security

    一.RSocket RSocket是一个用于字节流传输的二进制协议.它通过在单个连接上传递异步消息来支持对称交互模型,主要支持的通讯层包括 TCP, WebSockets和Aeron(UDP). RS ...

  4. bfs与dfs小结

    1,bfs适合状态容易存储的题目,如果状态比较难存储,就难以进行记忆化搜索,必然会难以bfs. (比如听说滑雪这个题你用bfs会死得很难看) 2,但是有些题目会很深(比如网格单源最短路),用dfs会跑 ...

  5. know thself

  6. Chocolatey 方便的windows 包管理工具

    windows 在包管理上一般大家都是网上下载二进制文件或者就是通过软件管家进行安装,这些对于开发人员可能就有点不是 很专业了, Chocolatey 是一个不错的windows 软件包管理工具 安装 ...

  7. Python题库系列分享一(17道)

    1.1  到Python官方网站下载并安装Python解释器环境.1.2  到Anaconda官方网站下载并安装最新的Anaconda3开发环境.1.3  Python程序的__name__的作用是什 ...

  8. Java两个数的和

    给你一个整数数组, 返回两个数的指数,使他们加起来等于给定的数. 你可以假设只有一个解, 并且相同的元素不会用两次. 比如: 给定数组 = [2, 7, 11, 15], 目标数 = 9, 因为[0] ...

  9. 第12组 Alpha事后诸葛亮

    Header 组长博客 Postmortem 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 要解决的是喜欢记录分享旅游生活的人群的行迹记录和分享问题, ...

  10. Deep-learning augmented RNA-seq analysis of transcript splicing | 用深度学习预测可变剪切

    可变剪切的预测已经很流行了,目前主要有两个流派: 用DNA序列以及variant来预测可变剪切:GeneSplicer.MaxEntScan.dbscSNV.S-CAP.MMSplice.clinVa ...