JavaWeb路径相关的总结

来源:互联网 发布:进入telnet端口命令 编辑:程序博客网 时间:2024/05/21 22:41

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.html

  • request.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()可以解决这个问题。