关于MyEclipse Servlet中调用this.getServletContext().getRealPath()抛出异常为null的问题

问题描述:

在显示Web应用目录下图片1.png时调用new FileInputStream(this.getServletContext().getRealPath(1.png))时抛出空指针异常:

严重: Servlet.service() for servlet [downloadServlet] in context with path [/Servlet] threw exception
java.lang.NullPointerException

解决:经反复确定代码输入及路径正常后,查找到此解决方案servletContext.getRealPath(),在此阐述一下个人理解:

context.getRealPath("/")在不同的服务器上所获得的实现是不一样的,对一个打包的应用来说,是没有RealPath的概念的,调用getRealPath只会简单地返回null。其实,也很好理解,一个文件被打包入了.war文件,就不存在目录结构了(虽然包中仍然存在目录结构,但这不等同于文件系统中的目录结构)。所以,对war包中的资源是无法得到RealPath的。这样也就无从通过文件IO进行读取了。

建议:

(1)使用ServletContext.getResourceAsStream("/WEB-INF/config/aa.config")方法替代

例如:InputStream in =
this.getServletContext().getResourceAsStream("/1.jpg");
  (2)调用this.getClass().getClassLoader().getResource("/").getPath();
获取到classes目录的全路径,在得到classes目录的全路径后再根据字符串的截取与拼装达到你的要求即可。

          
例如:InputStream in =new
FileInputStream(this.getClass().getClassLoader().getResource("../../1.jpg").getPath());

时间: 2024-08-29 01:59:48

关于MyEclipse Servlet中调用this.getServletContext().getRealPath()抛出异常为null的问题的相关文章

servlet中 getRealPath deprecated(被废弃)

servlet中, HttpRequestServlent req;  req.getRealPath 被废弃,使用this.getServletContext().getRealPath()替代:

java类中调用servlet

一.Java中调用servlet说明: 我们有时可能需要在Java类中调用Servlet从而实现某些特殊的功能,在JavaAPI中提供了一个URL的类,其中openStream( )方法可以打开URL的连接,并返回一个用于该连接读入的InputStream. 二.Java中调用servlet应用举例: package com.solid.test; import java.io.BufferedReader; import java.io.IOException; import java.io.

如何在java代码中调用一个web项目jsp或者servlet

有时候需要调用一个web项目的jsp或者servlet,但是执行内部的代码,并不是打开jsp,例如需要在一段java代码中清除一个web项目中的缓存,那么可以把清除缓存的代码放在该web项目的一个servlet中,只需要执行如下代码: URL url = new URL("http://192.168.2.123:8080/sace/ClearCache"); url.openStream(); openStream() 执行一次相当于一次URL请求,其中url.openStream(

servlet中this.getServletContext(); this.getServletConfig().getServletContext(); 的区别

WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用.ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象.由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯.

Servlet中生成json文件,echarts模板调用

在echarts官网中下载的模板数据都是固定的,而我的项目需要数据是动态改变的,所以我试了很多方法来解决这个问题,其中成功的一种方法是在Servlet中先生成json数据格式,之后再把内容写到一个json文件中,在HTML中在调用这个json文件就可以了. 先生成json数据格式 JSONObject q1 = new JSONObject(); JSONObject q2 = new JSONObject(); JSONObject q3 = new JSONObject(); JSONObj

Servlet中读取参数的几种方式

为每一Servlet设置初始化参数 可以为每一个Servlet在对应的web.xml中的Servlet节点下编写初始化参数,格式如下: <init-param> <param-name>userName</param-name> <param-value>admin</param-value> </init-param> 然后在servlet中用如下代码获取相应的参数: ServletConfig config = this.getS

JSP Servlet中Request与Response所有成员方法的研究

HttpServletRequest与HttpServletResponse作为Servlet中doGet.doPost等方法中传递的参数,承接了Http请求与响应中的大部分功能,请求的解析与响应的返回都需要靠这两个对象进行,他们中的所有方法及功能在下边总结了一下,希望能对学习Java Web开发有所帮助. 1.HttpServletRequest: /* * 记录各个request.get的值 * request.getAsyncContext();AsyncContext * 获取异步传输的

Servlet中Request和Response 详解

一.Response 1.Resonse的继承结构:   ServletResponse--HttpServletResponse 2.Response代表响应,于是响应消息中的 状态码.响应头.实体内容都可以由它进行操作,由此引伸出如下实验: 3.利用Response输出数据到客户端  response.getOutputStream().write("中文".getBytes())输出数据,这是一个字节流,是什么字节输出什么字节,而浏览器默认用平台字节码打开服务器发送的数据,如果服

在Servlet中利用Apache开源类库实现文件上传

本文结合具体的范例,介绍如何通过Apache开源类库提供的软件包,在Servlet中进行文件上传.本文的参考书籍是<Tomcat与Java Web开发技术详解>第三版,作者:孙卫琴. 本文所用的软件版本为:Window10,JDK10,Tomcat9.本文所涉及的源代码的下载网址为:http://www.javathinker.net/javaweb/upload-app.rar Apache开源软件组织提供了与文件上传有关的两个软件包:? fileupload软件包(commons-file