1.目录相关名词介绍
通常我们访问一个web应用地址格式如下:http://localhost:8080/MyWeb/HelloServlet
http://localhost:8080 这一部分我们称它为服务器的根目录
/MyWeb 这一部分我们称它为项目的根目录
- /HelloServlet 这一部分是我们Servlet的映射地址
绝对路径和相对路径
- 绝对路径:使用“/ ”开头的路径称为绝对路径,绝对路径表示从根目录开始寻找资源。
- 相对路径:不使用“ / ”开头的路径称为相对路径,相对路径表示从当前资源所在目录开始寻找资源
2.服务器端路径
服务器端路径,主要指在Servlet中使用转发时的路径。
服务器端的根目录指的是项目的根目录,也就是我们的项目名。
例如,我们现在访问如下地址的Servlet:
http://localhost:8080/MyWeb/hello/HelloServlet
在HelloServlet中调用转发方法
request.getRequestDispatcher(“/index.html”).forward(request,
response); 在路径地址处如果加了“ / ”相当于由项目根目录开始寻找资源 也就相当于将请求转发到如下地址:
http://localhost:8080/MyWeb/index.htmlrequest.getRequestDispatcher(“index.html”).forward(request,
response);
在路径地址处如果不加“/ ”相当于由当前项目所在目录开始寻找资源 也就相当于将请求转发到如下地址:
http://localhost:8080/MyWeb/hello/index.html
在实际应用中,由于我们的资源(Servlet和JSP)所在的位置有可能会发生变动,所以通常我们会使用绝对路径。
3.客户端路径
客户端路径,主要是值在页面中引用外部资源,以及在Servlet中做重定向操作时的路径。
客户端路径的根目录指的是我们tomcat的服务器的根目录,也就是项目名前面那段路径。
**我们现在访问如下地址的Servlet:
http://localhost:8080/MyWeb/hello/HelloServlet**
在HelloServlet中调用重定向方法 response.sendRedirect(“/index.html”);
在路径地址处如果加了“ / ”相当于由项目根目录开始寻找资源 也就相当于将请求重定向到如下地址:
http://localhost:8080/ index.html
但是这个地址明显不是我们想要的,所以在重定向使用绝对路径时必须要加入项目的名字,如下:
response.sendRedirect(“/MyWeb/index.html”);
如此请求将会重定向到http://localhost:8080/MyWeb/ index.html
response.sendRedirect(“index.html”);在路径地址处如果不加“/ ”相当于由当前项目所在目录开始寻找资源 也就相当于将请求重定向到如下地址:
http://localhost:8080/MyWeb/hello/index.html
**例2:在MyWeb项目中有form.html页面,目录结构如下:
webapps/MyWeb/hello/form.html**
现在我在form.html中创建超链接访问/hello/HelloServlet
连接格式如下:
<a href=”/HelloServlet”>HelloServlet<a>
使用绝对路径,网页和重定向的根目录相同,都是服务器的根目录
因此点击超链接后会访问如下地址
http://localhost:8080/HelloServlet
这个地址明显不对,所以应该从项目名开始写起
正确如下:
<a href=”/MyWeb/hello/HelloServlet”>HelloServlet</a>
点击后访问地址:
http://localhost:8080/MyWeb/hello/HelloServlet
<a href=”HelloServlet”>HelloServlet</a>
使用相对路径,会从当前html所在目录开始寻找资源,也就是从/MyWeb/hello/开始。
因此点击超链接后会访问如下地址:
http://localhost:8080/MyWeb/hello/HelloServlet
同样的,在实际开发中客户端的路径我们也会使用绝对路径,而不使用相对路径。
但是,这块有一个问题,在实际开发中我们项目名有可能会改变,比如:开发中的名字可能为DMS,而实际部署时就变成了Baidu_DMS。但是这是我们在项目中的路径是以/DMS开头的,那就意味着,我们要把项目中所有的页面中、Servlet中的/DMS修改成/Baidu_DMS,如此一来工作量是十分大的,那要如何解决呢?实际上我们可以通过request对象动态的获取项目名来解决这个问题,在JSP页面中,request.getContextPath()可以解决这个问题。