web应用中的路径问题

2017-11-14  本文已影响4人  Mon7ey

哪里会用到路径?

转发

用于转发时的调用方法:

servletContext.getRequestDispatcher("路径").forward(request,response);
request.getRequestDispatcher("路径").forward(request,response)
请求重定向

用于请求重定向时的调用方法:

response.sendRedirect("路径");
html页面超链接href

用于页面超链时的写法:

response.getWriter().write("<html><body><a href='路径'>超链接</a></body></html>");
html页面中的form提交地址

表单提交时

response.getWriter().write("<html><body><form action='路径'><input type='submit'/></form></body></html>");

路径使用时需要注意的几点:

  1. 注意: 在web应用项目中,用到路径时统一用" / "开头
  2. 思考: 目标资源是给谁使用的

资源文件路径问题

错误代码:

    File file = new File("./src/db.properties");
    FileInputStream in = new FileInputStream(file);
    
    // 创建配置文件对象
    Properties prop = new Properties();
    // 读取资源文件
    prop.load(in);
    
    // 根据属性名获取属性值
    String user = prop.getProperty("user");
    String pwd = prop.getProperty("password");

问题出在这句代码 : File file = new File("./src/db.properties");

注意:路径: ./src/db.properties"中的" . "(点)

在java项目中,表示相对路径中的当前路径.是相对于java命令运行的目录.

在web项目中,当前应用中的Servlet是在tomcat服务器上运行的,而tomcat服务器是由jvn调用tomcat/bin目录下的startup.bat文件运行的,也就意味意味着java命令是在tomcat/bin目录下调用的,所以".(点)"表示tomcat/bin目录.所以在web项目中用".(点)"是不可靠的

结论 : 在web项目中,".(点)"代表tomcat/bin目录下开始,所以不能使用这种相对路径,在web应用中应该使用web应用下加载资源文件的方式

推荐使用的方法
// 这个方法是
context.getRealPath("路径");
// 获得一个资源文件,返回的是一个输入流
context.getResourceAsStream("路径");

使用案例一
使用getRealPath("路径"); 方法

    // 因为在web应用中,src文件夹下的java文件会被编译为class文件存放在/WEB-INF/class/文件夹下
    // 所以db.properties文件也会被存放在/WEB-INF/class/文件夹下
    // getRealPath()方法会返回一个字符串,代表资源文件在web项目中的绝对路径
    String path = this.getServletContext().getRealPath("/WEB-INF/class/db.properties");
    
    File file = new File(path);
    FileInputStream in = new FileInputStream(file);
    // 创建配置文件对象
    Properties prop = new Properties();
    // 读取资源文件
    prop.load(in);
    
    // 根据属性名获取属性值
    String user = prop.getProperty("user");
    String pwd = prop.getProperty("password");

使用案例二
使用context.getResourceAsStream("路径"); 方法

Properties prop = new Properties();
    // 读取资源文件
    prop.load(this.getServletContext().getResourceAsStream("/WEB-INF/class/db.properties"));
    
    // 根据属性名获取属性值
    String user = prop.getProperty("user");
    String pwd = prop.getProperty("password");
上一篇 下一篇

猜你喜欢

热点阅读