1、相对路径和绝对路径

绝对路径:以 “ ” 开头的路径,是完整的路径。

相对路径:不以 “ / ” 开头的路径,是相对于当前web资源目录的路径。

在绝对路径中, “ / ” 的含义有两种解释:

  (1)如果是服务器端解析, “ / ” 代表相对于当前web应用的绝对路径,即:协议名://服务器名(主机地址):端口号/项目名/,例如:http://localhost:8080/MyTest/。

  (2)如果是浏览器端解析(出现在地址栏里的路径), “ / ” 代表相对于当前服务器的绝对路径,即:协议名://服务器名(主机地址):端口号/,例如:http://localhost:8080/。

常见的两种绝对路径的例子就是转发重定向

转发:当浏览器向服务器发送请求的时候,服务器自己不处理,而是调用其他的web资源进行处理。
重定向:当浏览器向服务器发送请求的时候,服务器返回给浏览器一个特殊的响应,这个特殊的响应告诉浏览器再向另一个地址发送一个请求。
转发和重定向的区别: 发生在浏览器还是服务器 浏览器的请求次数 浏览器地址栏是否发生变化 浏览器能否感知到
转发[request] 发生在服务器端 1 不发生变化 感知不到
重定向[response] 发生在浏览器端 2 发生变化 能感知到

假设在当前动态web项目MyTest中,项目根目录webContent下有两个页面src.html和des.html。

src.html中,通过超链接访问项目中的Servlet,此时a标签的地址有浏览器端解析,路径的第一个 “ / ” 代表http://localhost:8080/,如果直接写 " /MyServlet " 就会报404错误。

<a href="/MyTest/MyServlet">主页</a><!-- /MyTest/MyServlet等价于http://llocalhost:8080/MyTest/MyServlet -->

在MyServlet中做如下处理,将请求转发到des.html做处理,此时转发器中的地址由服务器解析,路径的第一个 “ / ” 代表http://localhost:8080/MyTest/。

如果是重定向,重定向中的地址由浏览器解析,路径的第一个 “ / ” 代表http://localhost:8080/,如果直接写 " /des.html " 就会报404错误。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/des.html").forward(request, response); // /des.html 等价于 http://localhost:8080/MyTest/des.html
//    response.sendRedirect("/MyTest/des.html"); // /MyTest/des.html 等价于 http://localhost:8080/MyTest/des.html
    }

如果是相对路径的话较简单些,但相比绝对路径,相对路径更容易出错,当页面更换位置时,链接容易失效。

<a href="MyServlet">主页</a>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("des.html").forward(request, response);
//    response.sendRedirect("des.html");
}

但是无论是相对路径还是绝对路径,都容易出问题。

2、动态获取路径(最不容易出错的方法)

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<body>
<!-- 获取当前链接使用的协议;一般应用返回http;SSL返回https; -->
request.getScheme()===<%=request.getScheme() %><!-- http -->
<br>
<!-- 获取当前页面所在的服务器的名字,如果是在本地的话就是localhost -->
request.getServerName()===<%=request.getServerName() %><!-- localhost -->
<br>
<!-- 获得服务器的端口号 -->
request.getServerPort()===<%=request.getServerPort() %><!-- 8080 -->
<br>
<!-- 获取当前web应用的根目录 -->
request.getContextPath()===<%=request.getContextPath() %><!-- /MyTest -->
<br>
basePath===<%=basePath %><!-- http://localhost:8080/MyTest/ -->
<br>
</body>

在java后台同样可以这样获取到路径,但是更多的用于前台的访问路径和js、css、img等静态资源的访问路径问题。

注意:如果在web.xml中配置了

 <servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

优雅的REST风格的资源URL不希望带.html或.do等后缀,若将DispatcherServlet请求映射配置为“/”,

则SpringMVC将捕获WEB容器的所有请求,包括静态资源的请求,SpringMVC会将他们当成一个普通请求处理,因此找不到对应处理器将导致错误。

解决方法:在SpringMVC的配置文件springmvc.xml中配置

<mvc:default-servlet-handler/>
<mvc:annotation-driven></mvc:annotation-driven>

web应用路径问题(相对路径,绝对路径,动态获取路径)的更多相关文章

  1. Python获取路径下所有文件名

    python 获取当前文件夹下所有文件名   os 模块下有两个函数: os.walk() os.listdir() 1 # -*- coding: utf-8 -*- 2 3 import os 4 ...

  2. JAVA文件中获取路径及WEB应用程序获取路径方法

    JAVA文件中获取路径及WEB应用程序获取路径方法 1. 基本概念的理解 `绝对路径`:你应用上的文件或目录在硬盘上真正的路径,如:URL.物理路径 例如: c:/xyz/test.txt代表了tes ...

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

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

  4. 完成一个servlet 就要在web.xml里面配一个映射,这样就有一个路径供我们 使用????? servlet从页面接收值?

    最后,最容易忘记的是:在dao层中 调用xml里的删除sql语句 后面需要人为加上事务提交.一定要! sqlSession.commit();//jdbc是自动提交,但是mybatis中不是自动提交的 ...

  5. Java获取路径的方法分析详解(Application/Web)

    1.利用System.getProperty()函数获取当前路径: System.getProperty("user.dir");//user.dir用户当前的工作目录,输出:D: ...

  6. web项目获取路径

    Java获取路径的各种方法:  (1).request.getRealPath("/"); //不推荐使用获取工程的根路径 (2).request.getRealPath(requ ...

  7. js相对路径相关(比如:js中的路径依赖导入该js文件的路径)

    问题描述: 前几天调用同事的js接口文件,在他自己的html测试页面ok,在我这边调用时出现问题. debug过程中,将该测试html移到其他位置都不行,放到原html测试页面同层次路径下是OK的. ...

  8. JavaEE 获取路径全攻略

    本篇博客是 JavaWeb 应用服务器端在不同环境下获取文件路径的全面总结. 获取文件路径后主要应用的场景,读取 JavaWeb 自定义配置文件.在特定路径下生成各种类型的文件提供下载...... 想 ...

  9. Java中获取路径的各种方法

    1. java文件中获得路径 Thread.currentThread().getContextClassLoader().getResource("") //获得资源文件(.cl ...

随机推荐

  1. HDOJ 5044 Tree

    树链剖分裸题. . .. 又要扩栈又要输入挂还卡格式....真无语 Tree Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 6553 ...

  2. 源码探究Java_HashMap

    1. HashMap 定义,抽取HashMap类中主要变量,如下 public class HashMap<K,V> extends AbstractMap<K,V> impl ...

  3. ES6学习笔记之变量声明let,const

    最近用淘宝的weex做了个项目,最近稍微闲下来了.正好很久没有接触RN了,所以趁这个机会系统的学习一下ES6的相关知识. 孔子说:没有对比就没有伤害.所以我们要拿ES6和ES5好好对比的学习.这样才能 ...

  4. Oracle备份一张表

    数据库:myOnly 创建表:myTable 的备份表 myTable_tmpe create table myTable_tmpe as select * from myTable ; 补充: -- ...

  5. nginx1.4.7+uwsgi+django1.9.2项目部署,liunx系统为ubuntu14.0.4。

    本文基于root用户下进行部署,django项目名称为BDFS 1.  安装依赖包,终端输入命令 1)         环境依赖包 apt-get update apt-get install pyt ...

  6. C#动态删除控件

    foreach (Control var in panel.Controls) { if (var is Billet) { panel.Controls.Remove(var); var.Dispo ...

  7. Brouwer fixed-point theorem

    w https://en.wikipedia.org/wiki/Brouwer_fixed-point_theorem https://zh.wikipedia.org/wiki/布劳威尔不动点定理 ...

  8. 如何搭建一个 Git 版本控制服务端?

    Gogs 下载和安装 https://github.com/gogits/gogs # 下载二进制压缩包 不检查服务器证书 root@cheungxiongwei:~# wget --no-check ...

  9. 我的Android进阶之旅------>Android横竖屏切换总结

    在默认情况下当屏幕从竖评变到横屏时会触发 onConfigurationChanged 事件 在默认情况下会重新加载画面并显示和横屏一样的画面,这样会有2个问题,   * 布局问题,在竖屏 显示的布局 ...

  10. Activity重要函数

    一.onConfigurationChanged 与 android:configChanges Lists configuration changes that the activity will ...