一、获得都是当前运行文件在服务器上的绝对路径
在servlet里用:
this.getServletContext().getRealPath();

在struts用:
this.getServlet().getServletContext().getRealPath();

在Action里用:
ServletActionContext.getRequest().getRealPath();

以上三个获得都是当前运行文件在服务器上的绝对路径
其实:
request.getRealPath("url"); // 虚拟目录映射为实际目录
request.getRealPath() 这个方法已经不推荐使用了,代替方法是:
request.getSession().getServletContext().getRealPath();

二、request获取各种路径总结
request.getRealPath("url"); // 虚拟目录映射为实际目录
request.getRealPath("./");    // 网页所在的目录
request.getRealPath("../"); // 网页所在目录的上一层目录
request.getContextPath();    // 应用的web目录的名称

如http://localhost:7001/bookStore/
/bookStore/ => [contextPath] (request.getContextPath())

获取Web项目的全路径
String strDirPath =request.getSession().getServletContext().getRealPath("/");

以工程名为news为例: http://localhost:8080/news/main/list.jsp

(1) 得到包含工程名的当前页面全路径:request.getRequestURI()
结果:/news/main/list.jsp

(2) 得到工程名:request.getContextPath()
结果:/news

(3) 得到当前页面所在目录下全名称:request.getServletPath()
结果:如果页面在jsp目录下 /main/list.jsp 

(4) 得到IE地址栏地址:request.getRequestURL()
结果:http://localhost:8080/news/main/list.jsp

(5) 得到相对地址:
request.getRequestURI()
结果:/news/main/list.jsp  

(6) 得到页面所在服务器的全路径:application.getRealPath("页面.jsp")
结果:D:\resin\webapps\news\main\list.jsp

(7) 得到页面所在服务器的绝对路径:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
结果:D:\resin\webapps\news

三、在类中取得路径

(1) 类的绝对路径:Class.class.getClass().getResource("/").getPath()
结果:/D:/TEST/WebRoot/WEB-INF/classes/pack/

例如:

String path=this.getClass().getResource("/").getPath();//得到d:/tomcat/webapps/工程名WEB-INF/classes/路径
path=path.substring(, path.indexOf("WEB-INF/classes"));//从路径字符串中取出工程路径

(2) 得到工程的路径:System.getProperty("user.dir")

结果:D:\TEST

四、在Servlet中取得路径
(1) 得到工程目录:request.getSession().getServletContext().getRealPath("") 参数可具体到包名。
结果:E:\Tomcat\webapps\news

import java.io.File;
public class Test {
  public static void main(String[] args) throws Exception {
     System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
    System.out.println(Test.class.getClassLoader().getResource(""));
    System.out.println(ClassLoader.getSystemResource(""));
    System.out.println(Test.class.getResource(""));
    System.out.println(Test.class.getResource("/")); //Class文件所在路径
    System.out.println(new File("/").getAbsolutePath());
    System.out.println(System.getProperty("user.dir"));
  }
}

五、系统路径说明: 

System.getProperty("user.dir")

如果是.bat或者.sh文件的话,那么该语句输出的时候.bat或者.sh所在的文件路径;

如果是weblogic服务器且由类输出的话,该语句输出的路径是./startWebLogic.sh文件所在的路径

        String osName = System.getProperties().getProperty("os.name");
if(osName.equals("Linux")){
System.setProperty("CPATH",System.getProperty("user.dir")+"/cssconfig.properties");
}else{
System.setProperty("CPATH",System.getProperty("user.dir")+"\\cssconfig.properties");
}

根据操作系统设定不同路径。

java中获取各种上下文路径的方法小结的更多相关文章

  1. Java中获取项目根路径和类加载路径的7种方法

    引言 在web项目开发过程中,可能会经常遇到要获取项目根路径的情况,那接下来我就总结一下,java中获取项目根路径的7种方法,主要是通过thisClass和System,线程和request等方法. ...

  2. java中获取日期和时间的方法总结

    1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下:  要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...

  3. 干货 | Java中获取类名的3种方法!

    获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里面的class的类名表现形式. getCanonicalName() 返回的是更容易理解的类名表示. g ...

  4. JAVA中获取文件MD5值的方法

    1 DigestUtils.md5Hex(new FileInputStream(path)); 如果你只需要使用标准的MD5,其实一行代码就够了,JAVA自带的commons-codec包就提供了获 ...

  5. JAVA中获取当前系统时间及格式转换

    JAVA中获取当前系统时间   一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; publi ...

  6. JAVA中获取当前系统时间

    一. 获取当前系统时间和日期并格式化输出: import java.util.Date;import java.text.SimpleDateFormat; public class NowStrin ...

  7. java中获取系统的当前时间

    转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输出: import java ...

  8. JAVA中获取项目文件路径

    在java中获得文件的路径在我们做上传文件操作时是不可避免的. web 上运行 1:this.getClass().getClassLoader().getResource("/" ...

  9. JAVA中获取文件MD5值的四种方法

    JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...

随机推荐

  1. Linux Shell基础 Shell的输入重定向和输出重定向

    概述 在 Linux 中输入设备指的是键盘,输出设备指的是显示器.在 Linux 中,所有的内容都是文件,计算机硬件也是文件,标准输入设备(键盘)和标准输出设备(显示器)也是文件.这些设备的设备文件名 ...

  2. VoLTE的前世今生...说清楚VoIP、VoLTE、CSFB、VoWiFi、SIP、IMS那些事...

    转:https://mp.weixin.qq.com/s?__biz=MzA3MTA3OTIwMw==&mid=401344844&idx=1&sn=497b351f524af ...

  3. Struts2笔记01——基础MVC架构(转)

    原始内容:https://www.tutorialspoint.com/struts_2/basic_mvc_architecture.htm Apache Struts 2是用来创建企业级Java ...

  4. python中编写带参数decorator

    考察上一节的 @log 装饰器: def log(f): def fn(x): print 'call ' + f.__name__ + '()...' return f(x) return fn 发 ...

  5. Java Collection API

    在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为方便.这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结 ...

  6. 20145230java实验报告二

    20145230实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步骤 ...

  7. docker calico安装

      第一步,安装etcd: 请参考以前的文章:  http://www.cnblogs.com/vincenshen/articles/8637949.html 第二步,下载calico: sudo ...

  8. windows10添加电源计划修改的快捷方案

    转自:http://news.mydrivers.com/1/431/431346.htm 由于目前的Windows 10预览版在UI方面还未优化到位,所以某些设置选项要想找出来是很难的,这时候如果能 ...

  9. DESeq2 install --- 如何安装R包("RcppArmadillo")?

    安装R包("RcppArmadillo")失败,导致依赖该包的DESeq2 无法使用: 首先对gcc,g++升级至4.7, 但依然报错,还是安装不了RcppArmadillo: 报 ...

  10. linux jdk安装。

    我使用的centos 7: 安转sun公司的jdk要先检查系统中是否安装jdk,一般来说Centos系统会默认会安装OpenJDK,但是openJDK部分内容 与SUN JDK不兼容,因此下面进行重新 ...