当我在下面的代码上进行XSS验证时,while((anInt=bufferedReader.read())!=-1)
行发出Null Dereference
问题。为此,这足以检查非null或我们是否有任何其他检查或解决方案来解决此问题。
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new FileReader(new File (url.toURI())));
} catch (Exception e) {
e.printStackTrace();
}
response.setContentType("text/plain");
try{
int anInt=0;
//if(!bufferedReader.equals(null)){
while((anInt=bufferedReader.read())!=-1)
response.getWriter().write(anInt);
//}
} catch(IOException ioe) { }
return null;
评论if条件..
答案 0 :(得分:3)
我收到
Null Dereference
问题
不,你不是。没有这样的问题'。你得到的是NullPointerException.
请准确。在解释错误消息时没有任何美德,或者没有正确阅读它们,或者导致您出现此错误的任何内容。
这里的表面上的错误是使用bufferedReader.equals()
作为测试来查看bufferedReader
是否null.
一时的想法会让你相信这样做是徒劳的。如果它为null,那么如何调用equals()
就能成功?
此处的原始错误是错误的结构化异常处理。您有catch
块后面的代码依赖于try
块的成功。因此,它应该 try
块内。然后你会注意到你只需要一个catch
块......但是请在里面放一些东西,比如exc.printStackTrace():
,否则调试就变成了猜测游戏。
答案 1 :(得分:2)
除了EJP指出的错误异常处理(以及你令人震惊的释义......)之外,你的代码总是返回null
。这似乎毫无意义。
但真正的问题实际上是由于您的异常处理导致造成。
首先:
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(
new FileReader(new File (url.toURI())));
} catch (Exception e) {
e.printStackTrace();
}
如果文件打开失败,则会捕获异常AND CONTINUE。那是你的第一个错误。你不应该在那里发现异常,因为你还没有准备好在那里处理它。
接下来:
if (!bufferedReader.equals(null)) {
我希望假定以防止bufferedReader
成为null
。但实际上,如果bufferedReader
为null
,则会导致抛出NPE ...因为您将尝试调用方法({{1} })在null目标对象上。
如果您想测试equals
是bufferedReader
,您应该像这样编码:
null
但如果您此时没有尝试处理上一个异常,那么根本不会需要来测试if (bufferedReader != null) {
...
确定。我正在删除.equals条件
叹息。停止攻击代码并尝试理解答案。
在不解决第一个问题的情况下删除测试只是移动将要抛出NPE的地方。
答案 2 :(得分:0)
bufferedReader.equals(null)
应该NullPointerException
检查bufferedReader
是否为空,您可以执行bufferedReader != null
。
答案 3 :(得分:-1)
bufferedReader可能会抛出EoFException,你必须处理它!