先看看几个路径的概念:

1绝对路径:/开头的路径就叫做绝对路径,绝对路径在相对于的路径上直接拼接得到最终的路径。

2相对路径:不以/开头的路径就叫做相对路径,相对路径基于当前所在的路径计算的到最终的路径。

3硬盘路径:以盘符开头的路径就叫做硬盘路径.是哪个路径就是哪个路径.没有相对于谁的问题。

1虚拟路径: ----都使用绝对路径

  (1)若虚拟路径是给浏览器用,这个路径相对于虚拟主机,所以需要写上web应用的名称

       <a href="${pageContext.request.contextPath}/.....">

      <form action="${pageContext.request.contextPath}/.....">

      <img src="${pageContext.request.contextPath}/.....">

      response.setHeader("Location",request.getContextPath()+"/index.jsp");  //重定向

      response.setHeader("refresh","3;url="+request.getContextPath()+"/index.jsp"); // 定时刷新重定向

      response.sendRedirect(request.getContextPath()+"/index.jsp");  //重定向

   

    (2)若虚拟路径是给服务器用的,这个路径相对于web应用,所以可以省写web应用的名称

      request.getRequestDispathce("/index.jsp").forward();  //转发

      request.getRequestDispathce("/index.jsp").include();  //包含   

 

 2真实路径: ----都使用相对路径,计算得到

  根据原理,具体问题具体分析

servletContext.getRealPath("1.jpg");    //--给一个相对于web应用目录的路径 

this.getServletContext().getRealPath("1.jpg").toString();

E:\Program-Files\apache-tomcat-6.0.36\webapps\day04\1.jpg

 

classLoader.getResource("2.jpg").getPath();   //--给一个相对于类加载目录下的路径

PathDemo.class.getClassLoader().getResource("2.jpg").getPath();

/E:/Program-Files/apache-tomcat-6.0.36/webapps/day04/WEB-INF/classes/2.jpg

PathDemo.class.getClassLoader().getResource("../../1.jpg").getPath();

/E:/Program-Files/apache-tomcat-6.0.36/webapps/day04/1.jpg

 

 

3、相对路径

File file = new File("config.properties");//--相对于程序的启动目录

new InputStream("config.properties");//--相对于程序的启动目录

E:\Program-Files\apache-tomcat-6.0.36\bin\config.properties

 

    public static void main(String[] args) {

    File file = new File("3.jpg");

    System.out.println(file.getAbsolutePath());}

    E:\Program-Files\java-workplace\MyeclipseWorkspace\myeclpse_javaweb_2016\day04\3.jpg

    

 

    public static void main(String[] args) {

    String path=demo1.class.getClassLoader().getResource("2.jpg").getPath();

    File file = new File(path);

    System.out.println(file.getAbsolutePath());

    E:\Program-Files\java-workplace\MyeclipseWorkspace\myeclpse_javaweb_2016\day10\bin\2.jpg

     

4、绝对路径  直接拼接

File file = new File("/1.jpg");

new InputStream("/1.jpg");

E:\1.jpg


地址路径写法举例

1Servlet的转发

RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher (/servlet/Demo6Servlet);  //获取转发器

dispatcher.forward(request,response);  //把请求响应转发到Demo6Servlet

 

2、请求重定向

//response.setStatus(302);

//response.setHeader("Location", "/day04/index.jsp");

response.sendRedirect("/day04/index.jsp");

 

3、请求包含:

两个资源的输出进行合并后输出

     1this.getServletContext().getRequestDispatcher(" /../..").include(request,response);

     2request.getRequestDispatcher("/../..").include(request,response);

     *被包含的Servlet程序,只能是实体内容

 

4、当前web应用的名称

resquest.getContextPath()= /day04 ,当前web应用虚拟目录名称  

重定向要这么写了

response.setHeader("Refresh", "2;url=+resquest.getContextPath()+/index.jsp");

 

5、在Servlet中读取资源文件

config.properties直接放在WebRoot文件夹下:= web应用根目录day03

Properties prop = new Properties();

prop.load(new FileReader(this.getServletContext().getRealPath("config.properties")));   

 

6、非Servlet环境下要读取资源

1config.properties直接放在src文件夹下:  = web应用目录的classes文件夹

Properties prop = new Properties();

prop.load(new FileReader( Service.class.getClassLoader().getResource("config.properties").getPath()));

 

2config.properties直接放在WebRoot文件夹下Service.class.getClassLoader().getResource("../../config.properties").getPath()

去上一层文件夹找../

classes里上一层是WEB-INF里,再上一层是Day3

 

3config.properties直接放在src/com/itheima文件夹下

Service.class.getClassLoader().getResource("com/itheima/config.properties").getPath()

 

 

7、定时更改刷新--是重定向 

indext.jspWebRoot文件夹下

response.setHeader("Refresh", "2;url=/day04/index.jsp");