您好我遇到了使用
的情况response.sendRedirect(url);
抛出空指针和
RequestDispatcher view = request.getRequestDispatcher(url);
view.forward(request, response);
工作正常。
我的代码是
if (session==null)
{
String url = "/HelloWorldNewSession";
//Throws null pointer if session is null
//response.sendRedirect(url);
RequestDispatcher view =
request.getRequestDispatcher(url);
view.forward(request, response);
}
我在浏览器中禁用了Cookie,并创建了一个新会话。
问题是response.sendRedirect是否要求会话重定向?
答案 0 :(得分:2)
可能要求url
生效。而/HelloWorldNewSession
不是它。所以它返回一个空指针。
答案 1 :(得分:1)
正如您在Difference between SendRedirect() and Forward() in JSP Servlet中看到的那样:
<强>调用RequestDispatcher.forward():强>
此方法用于将请求传递给另一个资源以便在同一服务器内进一步处理,另一个资源可以是任何servlet,jsp页面任何类型的文件。当我们调用forward方法请求时,Web容器会处理这个过程被发送到另一个资源而没有通知客户端,哪个资源将处理requestDispatcher对象上提到的请求,我们可以通过两种方式使用ServletContext或Request来获取该请求。这也称为服务器端重定向。
当我们使用forward方法时,请求被转移到同一服务器内的其他资源以进行进一步处理。
<强> response.sendRedirect是():强>
此方法用于将客户端请求重定向到其他位置以进行进一步处理,新位置可在不同服务器或不同上下文中使用。我们的Web容器处理此问题并使用浏览器传输请求,此请求在浏览器中可见作为一个新的要求。有时这也被称为客户端重定向。
如果sendRedirect请求被转移到另一个资源到不同的域或不同的服务器进行进一步处理。
因此,sendRedirect()
在您的案例中抛出NullPointerException
的原因是您使用它重定向到同一服务器中的网址,因为null
url
} 无法访问,response
无法重定向到此url
。