#Java中使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!
1,在开发Web方面的应用时, 经常需要获取 服务器中当前WebRoot的物理路径。 如果是Servlet , Action , Controller, 或则Filter , Listener , 拦截器等相关类时, 我们只需要获得ServletContext, 然后通过ServletContext.getRealPath("/")来获取当前应用在服务器上的物理地址。
## ServletContext对象:
1. 概念:代表整个web应用,可以和程序的容器(服务器)来通信
2. 获取:
1. 通过request对象获取
request.getServletContext();
2. 通过HttpServlet获取
this.getServletContext();
3. 范围
ServletContext对象范围:所有用户所有请求的数据
用ServletContext获取文件的真实(服务器)路径
1. 方法:String getRealPath(String path)
String b = context.getRealPath("/b.txt");//web目录下资源访问
System.out.println(b);
String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
System.out.println(c);
String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
System.out.println(a);
#2,如果在类中取不到ServletContext时, 有两种方式可以做到:
1. 利用Java的类加载机制 调用 XXX.class.getClassLoader().getResource(""); 方法来获取到ClassPath , 然后处理获得WebRoot目录,这种方式只能是该class在WebRoot/WEB-INF/classes下才能生效, 如果该class被打包到一个jar文件中, 则该方法失效。这时就应该用下面一种方式。
#很重要2.1 通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录)
InputStream is=TestAction.class.getClassLoader().getResourceAsStream("druid.properties"); (druid.properties文件的路径为 项目名\src\druid.properties类TestAction所在包的第一级目录位于src目录下)
这种方法获取的是InputStream类型的数据,可以再jdbc中使用例子:
Properties properties=new Properties();
InputStream is=JdbcUtil.class.getClassLoader().getResourceAsStream("druid.properties");
System.out.println(is);
properties.load(is);
#很重要2.2 类名.class.getClass().getResource("要加载的文件").getPath()) 例如:
File file=new File(tsstpath.class.getClass().getResource("/d.txt").getPath());
System.out.println(file); //输出 F:\java-10\day11\out\production\Fiiter\d.txt 我的文件在得src下的路径
BufferedReader bf=new BufferedReader(new FileReader(file));
List<String> list=new ArrayList<String>();
while ((str2=bf.readLine())!=null){
list.add(str2);
}
System.out.println(list); //文件里面的数据
bf.close();
#很重要2.3 类名.class.getClassLoader().getResource("d.txt").getPath();
String path = tsstpath.class.getClassLoader().getResource("d.txt").getPath();
System.out.println(path); //F:\java-10\day11\out\production\Fiiter\d.txt
这个直接返回String 类型的文件路径 用起来更方便
2.其次就是servlet中的思路 带*的重点了解
request功能:
1. 获取请求消息数据
1. (*)获取虚拟目录:/day14
* String getContextPath()
2. 获取Servlet路径: /demo1
* String getServletPath()
3. (*)获取请求URI:/day14/demo1
* String getRequestURI(): /day14/demo1
* StringBuffer getRequestURL() :http://localhost/day14/demo1
* URL:统一资源定位符 : http://localhost/day14/demo1 中华人民共和国
* URI:统一资源标识符 : /day14/demo1 共和国