根目录路径

路径问题

1. 完整的URL路径
(1). url的组成部分
  • 协议:http:// https://
  • 服务器主机地址:localhost ip地址
  • 服务器端口:8833 port端口
  • 项目的虚拟路径(部署路径):web_demo01
  • 具体项目上的资源路径:/test/login.html /user/add servlet的映射路径
(2) 什么时候使用完整的url路径
  • 浏览器地址栏直接访问
  • 一个项目中,访问另一个项目的资源
2. 相对路径

不以 “/” 开头的路径就是相对路径,
相对路径就是目标文件的url路径相对于当前文件的url路径,其中 …/ 表示上一级目录,./ 表示当前目录

	目标资源的url:http://localhost:8833/web_demo01/servlet01
	当前资源的ulr:http://localhsot:8833/web_demo01/test/login.html
	
	- 优势:无论部署的项目名如何变化,访问的资源路径都不需要改变
	- 劣势:如果当前资源的路径发生变化,使用相对路径访问项目内别的资源必定要发生改变
3. 绝对路径

绝对路径就是以 “/” 开头的路径,有如下两种写法:
1. 请求转发的绝对路径:"/要访问的资源路径",不需要写项目的虚拟路径
2. 不是请求转发的绝对路径:"/项目的虚拟路径/要访问的资源路径"

	绝对路径:不是请求转发的情况:/要访问的资源路径
		- 优势:无论当前资源的位置如何发生变化,要访问资源的那个路径都是不会改变的
		- 劣势:如果当前项目的虚拟路径改变,那么所有资源的绝对路径必须要改变

重定向和请求转发

	req.getRequestDispatcher("/demo").forward(req, resp);
    req.getRequestDispatcher("demo").forward(req, resp);

    resp.sendRedirect("/web_demo1/demo");
    resp.sendRedirect("demo");
1. 请求转发

在这里插入图片描述

  • 请求转发的地址栏不会发生变化
  • 从始至终只有一次请求,也只有一次响应
  • 可以请求转发到WEB-INF目录下,但是只能在本项目中请求转发,不能请求转发到其他项目中
  • 请求转发的绝对路径 = /访问的资源路径,不需要加上项目的虚拟路径

Tips: 需要注意的是:
1. servletRequest的getRequestDispatcher()是可以写相对路径和绝对路径的
2. servletContext的getRequestDispatcher()只能写绝对路径

但是,需要注意的是,无论是那种方式请求转发访问资源,都只需要写资源路径,不需要写项目的虚拟路径

2. 重定向

在这里插入图片描述

  • 重定向是两次请求,地址栏会发生改变
  • 重定向可以访问外部的项目资源
  • 重定向的绝对路径需要加上项目的虚拟路径 /项目的虚拟路径/访问的资源路径
  • 重定向不可以访问到WEB-INF目录下的资源

重定向和请求转发相同,都可以使用绝对路径和相对路径
1. 使用绝对路径:要加上项目的虚拟路径:/项目虚拟路径/重定向的资源路径
2. 使用相对路径:不需要加上项目的虚拟路径:重定向的资源路径

需要注意的是,上面的访问方式都只能访问本项目中的资源,如若需要访问外部项目的资源,必须使用完整的 URL路径

跳转中使用request域对象的问题

Tips:
1.重定向的访问本地项目资源,不能使用request域对象
2.而请求转发访问本地项目资源,可以使用request域对象

requets域对象的声明周期在一次请求中,客户端发起请求时创建,请求结束做出响应时销毁。重定向的本质是两次请求,所以不可以使用request域对象

根目录问题

使用绝对路径时需要掌握根目录这个知识点

  • web站点根目录:对浏览器而言,浏览器的根目录就是站点根目录:http://localhost:8888/
  • web应用根目录:对于项目工程而言,服务器的根目录就是项目根目录:http://localhost:8888/(contextPath)/

" / "在浏览器中使用指代的就是web站点根目录,而在服务器中使用指代的就是web应用根目录

而web应用根目录就是在web站点根目录后面拼接上contextPath虚拟路径

Tips:
1. 请求转发,请求转发使用的是web应用根目录,所以会自动拼接contextPath虚拟路径,直接写访问资源路径即可
2. url-pattern就是@webServlet的值,也使用的是web应用根目录,直接写资源路径

3. 超链接:<a标签> href的url路径,使用的是web站点根目录,在点击跳转路径时需要加上contextPath虚拟路径
4. form表单的action:同样的使用的也是web站点根目录
5. 重定向:使用的也是web站点根目录,需要加上contextPath虚拟路径

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值