您的位置:首页 > 编程语言 > Java开发

JavaEE获取资源(通过路径/通过域名)

2016-08-28 09:51 148 查看

一、通过路径

1、使用ServletContext

/*
* 这里将获取的path是web项目的全路径
* 例如:E:/workspace/webapp/
* webapp是我web项目的根目录
*/
String path = servletContext.getRealPath("/");


2、使用ClassLoader

// 获取Class对象
String clazz = getClass();
// 获取ClassLoader 对象
ClassLoader classLoader = clazz.getClassLoader();

/*
* 通过Class获取资源路径(相对路径当前Class目录)
* 例如:%TOMCAT_HOME%/webapps/appName/WEB-INF/classes/com/accelerator/
* 当前Class的包就是com.accelerator
*/
URL url1 = clazz .getResource("");

/*
* 通过ClassLoader获取资源路径(相对路径Class根目录)
* 例如:%TOMCAT_HOME%/webapps/appName/WEB-INF/classes/
* 当前Class的classpath根目录
*/
URL url2 = classLoader.getResource("");


此方法有个BUG(当文件路径有中文和空格时解析不正确)、提供以下解决方法:

使用
repaceAll("%20", " ")
替换后、只能解决空格问题、但是路径中包含%和中文就不行了、

使用
URLDecoder.decode(String, "UTF-8")
解码、但是只能解决一部分、若路径中含有+、也是不能解决的、原因是URL并不是完全用URLEncoder.encode(str,”UTF-8”)编码的、+号被解码后、却变成了空格

可以解决所有的问题、用
getResource.toURI().getPath()
但是需要处理URISyntaxException异常、比较麻烦点、

这个方法也可以不在Server环境里确定路径、两种getResource的方式最终实现都是通过classLoader、

想深入了解的可以参考:classLoader.getResource(String)和class.getResource(String)的区别

二、通过域名

1、使用HttpServletRequest

String path = request.getContextPath();
/*
* 这里获取的basePath为网站的根目录路径
* 例如:http://www.accelerator.com:8080/test
* test是我的项目context、
* 此路径一般用来引用CSS、js、img等资源、
*/
String basePath = request.getScheme() + "://" + request.getServerName() + ":"
+ request.getServerPort() + path + "/";


4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: