相对路径、绝对路径、部署路径(html/css/servlet/jsp)

当在进行前后台整合的时候,往往会出现路径不统一或者路径错误的情况,结果就是css无效、servlet或jsp页面映射不到。

所以特意对路径的设置写一下总结:

这里只涉及到 web应用的路径问题, 至于本地系统的路径不做讨论。

1. 路劲可分为 绝对路径 和 相对路径

 

2. 绝对路径 (开头带"/"

  前端: http://localhost:8080/myWebApp/user/login.jsp

     /myWebApp/user/login.jsp

  后端: /user/login.jsp

  这里可以看出一个区别, 其中"/"这个斜杠在前后端有着不同的意义:

  前端--> (表示) 服务器的根路径(例如:http://localhost:8080/)

  后端-->(表示) 应用的根路径 (例如: http://localhost:8080/yourWebAppName/)

3. 相对路径 (开头不带"/")

     举个例子, 假如当前的路径是 http://localhost:8080/myWebApp/user/login.jsp

      那么这时候访问 “main.jsp”页面,即访问的是 http://localhost:8080/myWebApp/user/main.jsp

  也就是说,使用相对路径,那么访问的是 当前页面路径 所属 目录 下的文件路径

  这个特性无论是在前端 、 后端 都是一样的。

  在java中,无论是JSP或者Servlet , 都可以通过request这个对象获得requestURL( ) , 该方法返回当前所访问的页面的绝对路径的一个StringBuilder。

  应用服务器正是通过该路径来得到用户想要访问的页面路径。

  而一般使用forward时,就是通过修改该路径(无论当前指定的是绝对路径或者相对路径),来请求新的路径。

 

4. JSP/Servlet中对路径信息的获取的相关API

下面是一个使用jetty作为底层的服务器。其中存在一个映射为/plugins的servlet

我们访问的页面为:http://localhost:9090/plugins/maidatabase/user-vCard-view.jsp

下面是调用相关API以及得到的结果

复制代码
the Base path(scheme+serverName+serverport+requestContext): http://localhost:9090  //应用路径 

request.reqeustURL(): http://localhost:9090/plugins/maidatabase/user-vCard-view.jsp    //请求路径
request.requestURI(): /plugins/maidatabase/user-vCard-view.jsp    //请求路径(相对服务器根目录部分)

request.getSession.getServletContext().getRealPath(""): E:\projects\openfire_src\target\openfire\plugins\admin\webapp  //根目录的真实路径
request.getSession().getServletContext().getResource("/").toString(): file:/E:/projects/openfire_src/target/openfire/plugins/admin/webapp/  //这里必须要‘/'开头

request.getServletPath(): /plugins  //servlet的映射路径

the servletContext serverInfo: jetty/7.0.1.v20091125  //服务器信息
request.pathInfo() : /maidatabase/user-vCard-view.jsp  //请求路径中位于 servlet路径 和 查询数据 之间的 附加路径信息

servletContext.getContextPath() :    //应用上下文路径(标准的)
request.getContextPath():    //请求request 所指向的应用上下文路径 一般为应用路径,即/yourWebAppName  (因为这里的场景是把整个应用服务器当成一个应用,所以应用上下文为"")
复制代码

 

5. 附带上别人的文章

  这篇文章总结得好,而且很简练:
1. <form action="abc.do" method="post">*********</form>,并且该页面的访问地址是http://localhost:8080/yaso/login
   <form action="/abc.do" method="post">*********</form>,并且该页面的访问地址是http://localhost:8080/yaso/login
    此处可以使用相对路径或者绝对路径,其中相对路径是相对于当前访问的页面。当提交表单后,浏览器地址栏中的信息变为http://localhost:8080/yaso/abc.do
    如果使用绝对路径,则"/"是指服务器的根而非应用的根。如果将上述表单改为action="/abc.do",则当提交表单后,浏览器地址栏中的信息变为http://localhost:8080/abc.do
    如果要使用绝对路径可以使用getContextPath()方法。

2. 在web.xml中的<servlet-mapping>中的<url-pattern>标记中只能使用绝对路径,即必须要 以"/"开头。可以这样理解:一个应用对应于一个web.xml,所以这里的绝对路径表示应用的根,而不是服务器的根。(一个特殊情况就是 在<url-pattern>中使用模式匹配的*.do,但仍然应该理解成从/开始。)

3.RequestDispatcher view = request.getRequestDispatcher("/abc.jsp");
   RequestDispatcher view = request.getRequestDispatcher("abc.jsp");
    这里可以使用相对路径和绝对路径。相对路径是当执行到该代码所在的Servlet的时候地址栏上显示的路径。
    如果使用绝对路径,则"/"表示应用的根。

4.RequestDispatcher view = getServletContext().getRequestDispatcher("/abc.jsp");
    这里必须使用绝对路径,"/"表示应用的根。可以这么理解:在ServletContext上调用请求转发,如果使用相对路径,则无法得知到底相对于该应用的什么位置,只能根据绝对路径来判断。由于是在应用上下文上调用的方法,所以"/"就表示应用的根。

5.servletContext中的getResourceAsStream(String),其中的参数应该是以"/"开头的绝对路径,其中"/"表示应用的根。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件上传漏洞是指在网站或应用程序中存在漏洞,使得攻击者可以上传恶意文件到服务器上。通过利用文件上传漏洞,攻击者可以执行任意代码,获取服务器权限,或者在服务器上执行其他恶意操作。 要找到文件上传漏洞的绝对路径,可以通过以下步骤进行: 1. 首先,尝试上传一个文件,观察上传的文件是否被服务器接受并保存。如果上传成功,可以尝试修改文件的扩展名或内容,以绕过服务器的文件类型检查。这样可以确保上传的文件能够被服务器执行。 2. 上传成功后,需要找到上传文件的绝对路径。可以通过查看上传文件的URL或文件路径来获取。通常,上传的文件会被保存在服务器的特定目录中,可以通过查看服务器配置文件或应用程序代码来确定上传文件的保存路径。 3. 一旦找到上传文件的绝对路径,可以使用蚁剑等工具来连接服务器并执行代码。通过连接服务器,可以利用上传的文件执行任意代码,获取服务器权限或进行其他操作。 需要注意的是,为了使上传的文件能够被服务器执行,通常需要将文件的扩展名修改为服务器支持的脚本语言类型,如PHP。这样服务器在执行文件时会将其作为脚本来解析并执行其中的代码。 总结起来,要找到文件上传漏洞的绝对路径,需要通过上传文件并修改扩展名或内容来绕过服务器的文件类型检查,然后查找上传文件的保存路径,并使用相应的工具连接服务器并执行代码。 #### 引用[.reference_title] - *1* *2* *3* [文件上传漏洞详解](https://blog.csdn.net/2301_76160896/article/details/131215650)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值