1.关于request.getRealPath的出错
问题:
String filename = request.getRealPath(filename); //出了错
-------------------
错误信息:
The method getRealPath(String) from the type ServletRequest is deprecated
解决:
资料来源:http://bbs.chinaunix.net/viewthread.php?tid=383861
参看request.getRealPath的java doc:
Deprecated. As of Version 2.1 of the Java Servlet API, use ServletContext.getRealPath(java.lang.String) instead.
而在servlet中使用getServletContext.getRealPath()这个方法受到war 和non-war的影响,以及不同app server实现的影响,运气好的话,你常常会得到null,嘿嘿,比如你在weblogic上部署war文件,又调用这个方法..
推荐ServletContext.getResourceAsStream
参考资料:http://bbs.chinaunix.net/viewthread.php?tid=383861
2.关于serveletContext.getRealPath返回NULL和不同的app server返回不同的结果
问题:
我的应用有几个文本配置文件(是一些报表的模板),我放在WEB-INF下面的config目录下,我有程序
中是这样得到这个config的实际路径的
先用 serveletContext.getRealPath得到根路径,tomcat中比如是c:\tomcat\webapp\test 然后我加上 "/WEB-INF/config/aa.config",这样得到文件的path然后进行读入,应用在tomcat上跑是ok的,后来将war放到weblogic上,出错,原因是:在weblogic上用getRealPath得到的是像myserver\stage\_appsdir_test_war\test.war!\WEB-INF\config....这样的路径,于是一直报FileNotFoundException
解决:
serveletContext.getRealPath
这个方法在不同的服务器上所获得的实现是不一样的
这种情况我也同样遇到过,建议是通过classloader来获得你配置的资源文件
context.getRealPath("/")可能返回了null,你可以输入来看看,
对一个打包的应用来说,是没有RealPath的概念的,调用getRealPath只会简单地返回null。其实,也很
好理解,一个文件被打包入了.war文件,就不存在目录结构了(虽然包中仍然存在目录结构,但这不等同
于文件系统中的目录结构)。所以,对war包中的资源是无法得到RealPath的。这样也就无从通过文件IO
进行读取了。
那么,如何读取war包中的资源呢?答案是使用ServletContext.getResourceAsStream
("/WEB-INF/config/aa.config")方法。
原则:基本上就是尽量使用j2ee规范中的各层次classloader来获取资源,而不是试图去找文件的绝对路径
方法:调用this.getClass().getClassLoader().getResource("/").getPath(); 获取到classes目录的全
路径
使用:在得到classes目录的全路径后再根据字符串的截取与拼装达到你的要求即可。
同时WebLogic对WEB-INF目录下的文件是有访问控制的,最好不要放在WEB-INF目录下。
-------------------------------------------------------------------------
实际项目中,一个使用serveletContext.getRealPath访问WebRoot下config文件夹里的xml配置文件,确实可行,但是操作有些讲究,我是把WebRoot(即编译需要部署的根目录)移动到C盘下,将WebRoot改名为项目context名,然后部署,不能部署eclipse项目的原因尚不清楚~~~先记下来 ,以后研究~!
分享到:
相关推荐
### Request中getContextPath、getServletPath、getRequestURI、request.getRealPath的区别 #### 一、概述 在Java Web开发中,对于HTTP请求处理时经常需要用到`HttpServletRequest`对象的方法来获取客户端请求的...
用于添加其他应用列表打开文件获取微信QQ 分享过来的文件真实路径,并替换路径中存在的编码格式问题,解决文件上传媒体库找不到传输的文件,可以在微信,QQ中直接选择自己的应用打开,并获取到文件的路径!
String realPath=ServletActionContext.getServletContext().getRealPath("/"+this.getPath()+"/"+fileName); System.out.println(realPath); return ServletActionContext.getServletContext()....
jsp探针ceshi.jsp ; charset=gb2312" %> class LfSpy { boolean supportHibernate = false; boolean supportJNDI = false;...boolean supportJavaxSql = false;...private final String linuxParseMacAddress(String ...
1. **Servlet中的`getRealPath()`**: 在Servlet中,可以使用`HttpServletRequest`或`ServletContext`的`getRealPath()`方法来获取绝对路径。例如: ```java String path = request.getServletContext()....
- 使用`request.getRealPath(".")`或`request.getRealPath("")`:这将返回当前请求所在的目录的绝对路径。 - 示例:`C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\strutsTest` - 使用`request...
- `request.getRealPath(".")` 返回当前请求的目录,与 `request.getRealPath("/")` 相同。 - `request.getRealPath("web.xml")` 返回 `web.xml` 文件的实际路径。 2. `request.getParameter("")` 和 `ActionForm...
- **getRealPath()方法**:`getRealPath()`方法是Servlet API提供的一种方法,用于将虚拟路径转换为物理路径。如果转换失败,则返回`null`。 **1.2 方法定义** ```java public String getRealPath(String path); `...
getServletContext()空指针异常的原因getServletContext()空指针异常的原因getServletContext()空指针异常的原因getServletContext()空指针异常的原因getServletContext()空指针异常的原因
request.getSession().getServletContext().getRealPath("/"); ``` 这段代码中的`getServletContext()`方法返回了当前Servlet上下文,即整个Web应用的上下文。接着调用`getRealPath("/")`方法来获取Web应用在...
例如,如果你需要读取一个配置文件,可以使用`getClass().getResourceAsStream("/config.properties")`来获取流,或者使用`getRealPath()`获取其绝对路径后再进行文件操作。 在实际开发中,选择合适的方法取决于...
其中一个关键方法是`getRealPath()`,它允许我们获取Web应用的物理路径。 当我们需要访问位于Web应用根目录下的文件时,`getRealPath()`方法就派上用场了。例如,如果我们有一个名为"images/logo.png"的静态资源,...
- 请求文件的上层目录:`new File(application.getRealPath(request.getRequestURI())).getParent()`。 - **Servlet中获取路径**: - 根目录的绝对路径:`request.getServletPath()`。 - 文件的绝对路径:`...
在 Servlet 中,我们可以使用 ServletContext 的 getRealPath(String path) 方法来获取资源文件的真实路径。该方法返回的是资源文件在服务器文件系统上的真实路径。参数 path 代表资源文件的虚拟路径,它应该以正...
String planeImage = request.getSession().getServletContext().getRealPath("/image").replace("\\", "/")+"/"+"symark.png"; //获取目标图片的路径String targetPic = request.getSession().getServletContext()....
- 请求文件的上层目录:`new File(application.getRealPath(request.getRequestURI())).getParent()` 5. **在Servlet中获取路径** - 根目录的绝对路径:`request.getServletPath()` - 文件的绝对路径:`request....
- 在JSP中,可以使用`request.getRequestURI()`获取根目录对应的绝对路径,`application.getRealPath(request.getRequestURI())`获取文件的绝对路径,`application.getRealPath("/")`获取Web应用的绝对路径,`new ...
- `request.getSession().getServletContext().getRealPath("/")` - `this.getServletContext().getRealPath("/")` - `this.getServlet().getServletContext().getRealPath("/")` 其中,`request.getRealPath()...