路径

一。超链接、表单、重定向都是客户端路径,客户端路径http://localhost:8080可以分为三种方式:

绝对路径:  <a href="http://localhost:8080/hello2/index.html">链接1</a>
客户端路径:<a href="/hello2/pages/index.html">链接2</a>项目名+包名+类名
相对路径:  <a href="index.html">链接3</a>当前类下的index.html

重定向路径加/:项目名加类名,

response.sendRedirect(request.getContextPath() + "/BServlet");

response.sendRedirect("/hello/BServlet");

不加/就是直接

response.sendRedirect("BServlet");

二:服务器端路径必须是相对路径,不能是绝对路径。请求转发、请求包含,<url-pattern>路径都是服务器端路径  http://localhost:8080/项目名

 request.getRequestDispatcher("/BServlet").forward(request, response);

因为路径以“/”开头,所以相对当前应用,即http://localhost:8080/hello/BServlet。加不加/都可以

三:ServletContext获取资源

必须是相对路径,可以“/”开头,也可以不使用“/”开头,但无论是否使用“/”开头都是相对当前应用路径。

 String path1 = this.getServletContext().getRealPath("a.txt");
        String path2 = this.getServletContext().getRealPath("/a.txt");

path1和path2是相同的结果:http://localhost:8080/hello/a.txt

四:Class获取资源

Class获取资源也必须是相对路径,可以“/”开头,也可以不使用“/”开头。

Demo.class.getResourceAsStream("/a.txt");

Demo.class.getResourceAsStream("a.txt");

获取资源时以“/”开头,那么相对的是当前类路径,/hello/WEB-INF/classes/a.txt文件;默认在编译后的classes包下面

获取资源时没有以“/”开头,那么相对当前Demo.class所在路径,因为Demo类在com.sxt包下,所以资源路径为:/hello/WEB-INF/classes/com/sxt/a.txt。默认和当前类在同一个包下面

五:ClassLoader获取资源

ClassLoader获取资源也必须是相对路径,可以“/”开头,也可以不使用“/”开头。但无论是否以“/”开头,资源都是相对当前类路径。

InputStream in = Demo.class.getClassLoader().getResourceAsStream("a.txt");

都是相对类路径,即classes目录,即/hello/WEB-INF/classes/a.txt;默认在编译后的classes包下面

原文地址:https://www.cnblogs.com/lndbky/p/13372422.html