request.getRealPath用于获取应用的绝对路径,但现在已经建议不要使用了。
由于在servlet中使用getServletContext.getRealPath()方法受到war 和non-war的影响,以及不同app server实现的影响,莫名地常常会得到null。
原因在于:对一个打包的应用来说,是没有RealPath的概念的,调用getRealPath只会简单地返回null。其实,也很好理解,一个文件被打包入了.war文件,就不存在目录结构了(虽然包中仍然存在目录结构,但这不等同于文件系统中的目录结构)。所以,对war包中的资源是无法得到RealPath的。这样也就无从通过文件IO进行读取了。
解决的方法如下:
使用servletContext.getResourceAsStream():
如获取war中的资源路径 servletContext.getResourceAsStream("/WEB-INF/resource/test.config")方法。
原则:基本上就是尽量使用j2ee规范中的各层次classloader来获取资源,而不是试图去找文件的绝对路
径
方法:调用this.getClass().getClassLoader().getResource("/").getPath(); 获取到classes目录的全路径
使用:在得到classes目录的全路径后再根据字符串的截取与拼装达到你的要求即可。
绝对不要使用ServletContext的getRealPath方法获取Web应用的路径!应该使用ServletContext的getResource()方法,直接使用相对于Web应用根目录的相对路径来获取资源。
分享到:
相关推荐
Request中getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
5、JSP/Servlet中获得当前应用的相对路径和绝对路径 JSP中获得当前应用的相对路径和绝对路径 根目录所对应的绝对路径:request.getRequestURI() 文件的绝对路径:application.getRealPath(request.getRequestURI...
String realPath=ServletActionContext.getServletContext().getRealPath("/"+this.getPath()+"/"+fileName); System.out.println(realPath); return ServletActionContext.getServletContext()....
//不推荐使用获取工程的根路径 (2)、request.getRealPath(request.getRequestURI());//获取jsp的路径,这个方法比较好用,可以直接在servlet和jsp中使用 (3)、request.getSession().getServletContext().getRealPath...
//获取目标图片的路径String targetPic = request.getSession().getServletContext().getRealPath("/image").replace("\\", "/")+"/"+ad.getId()+"."+ad.getExttype(); //给目标图片加水印,name为水印图片,targetPic...
用于添加其他应用列表打开文件获取微信QQ 分享过来的文件真实路径,并替换路径中存在的编码格式问题,解决文件上传媒体库找不到传输的文件,可以在微信,QQ中直接选择自己的应用打开,并获取到文件的路径!
getServletContext()空指针异常的原因getServletContext()空指针异常的原因getServletContext()空指针异常的原因getServletContext()空指针异常的原因getServletContext()空指针异常的原因
在项目中,我们经常要得到项目的绝对路径,方便我们上传下载文件,JS为我们提供了方法,虽说要迂回一下。代码如下: function getRealPath(){ //获取当前网址,如: http://localhost:8083/myproj/view/my.jsp ...
String path=request.getRealPath(""); path=path + "\Sub";//将要建立的目录路径 File d=new File(path);//建立代表Sub目录的File对象,并得到它的一个引用 if(d.exists()){//检查Sub目录是否存在
fileutil工具类 处理文件流工具 private static File file; /** * 判断文件是否存在 * * @param path * 文件路径 * @return boolean ... public static ....getRealPath(path)); return file.exists(); }
struts1.2 的上传和下载, 如果需要得到相对路径, 加一个 String path=request.getSession().getServletContext().getRealPath(); 就行了 ,这个就是comcat下的项目路径。
String sWebRootPath = request.getRealPath("/"); String sPath=sWebRootPath+"file"; String sLocalFileName = ""; int iFileCount = 0; if ( (files != null) || (!files.isEmpty()) ) { UploadFile file = ...
// 取得文件的绝对路径 String realName = servletContext.getRealPath(path) + "/" + fileName; HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext .getCurrentInstance()....
// 得到去除路径的文件名 String t_name = path.substring(path.lastIndexOf("\\") + 1); System.out.println(t_name); // 得到文件的扩展名(无扩展名时将得到全名) String t_ext = t_name.substring(t_name....
String path = this.getServletContext().getRealPath("/WEB-INF/upload"); 二、文件下载部分 1.访问地址一 http://localhost/UploadAndDownload/download.jsp 该地址实现的是通过超链接下载。 2.访问地址二 ...
au.setSaveDir(this.servlet.getServletContext().getRealPath("/loadImage/"));//将图片放入存储文件路径 fileName=au.randomFileName(file.getFileName()); au.upload(au.getSaveDir()+File.separator+ ...
//获取跟文件夹的绝对路径,"/"代表获取跟路径 String path=ServletActionContext .getServletContext() .getRealPath("/"); System.out.print("path="+path); //定义一个日期格式作为自己的文件名 ...
Servlet实现文件下载public void doGet(HttpServletRequest request, HttpServletResponse response) ... String str = this.getServletContext().getRealPath("/download/隐形的翅膀 - 张韶涵正版.mp3");
在一个web服务器上,虚拟路径将物理上分离的各文件组合在一起,放在同一个站点路径上,在应用服务器上,每个应用定位于其自己的虚拟路径上,实际上相互之间有着完美地分离。getRealPath()方法JSP servlet API提供...