所以,我有一个servlet作为接受URL的RSS feed项目的一部分,然后它继续做一些超出这个特定问题的其他事情。如果用户提交(通过表单)空白或其他无效的URL,我有以下代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
URL feedURL = null;
try {
feedURL = new URL(request.getParameter("url"));
} catch (MalformedURLException e) {
PrintWriter out = response.getWriter();
out.println("Please go back and submit a valid URL.");
}
现在我没有获得MalformedURLException
,而是获得了NullPointerException
。我是以正确的方式来做这件事的吗?我是否必须将错误消息指向某个更具体的错误消息才能找到用户?我会更好地使用response.sendError()
或其他方法,比如客户端的JavaScript吗?
如果重要,请求来自JSP。
与往常一样,StackOverflow社区,请提前感谢您的帮助。
答案 0 :(得分:1)
try {
feedURL = new URL(request.getParameter("url"));
} catch (MalformedURLException e) {
PrintWriter out = response.getWriter();
out.println("Please go back and submit a valid URL.");
return;
}
你应该在catch块中做一个返回。 Nullpointer可能会从下一行抛出,因为feedURL将为null。如果这不是原因,请分享您获得的Nullpointer跟踪。
在我看来,你应该从catch块转发到错误页面。
答案 1 :(得分:1)
当您创建java.net.URL
类的实例时,其构造函数可以抛出MalformedURLException
。当URL无效时会发生这种情况。
抛出时,不是因为主机已关闭( 503 ),或者URL路径指向丢失的文件( 404 ) 。
常见错误包括: - 1.退出协议 2.指定无效的协议 例如www://stackoverlfow.com 3.排除':'字符
如果出现以下情况,则不会抛出 MalformedURLException
: -
如果URL字符串不可解析或包含不受支持的协议,它也会抛出MalformedURLException
。
您收到NullPointerException
表示请求中缺少名为“url”的参数。仔细检查您的请求将始终以“url”作为参数。
有很多方法可以告知客户有问题。
您可以使用`response.sendError()之类的
response.setContentType("text/html");
PrintWriter out = response.getWriter();
if (request.getParameter("important_parameter") == null) {
response.sendError(response.SC_BAD_REQUEST, "Missing URL parameter");
}
我不知道如何使用Javascript
来处理它。但是,您也可以转发到同一页面或错误页面,并将消息作为提及错误的参数传递。
答案 2 :(得分:0)
看起来你正在URL构造函数中获取NPE,它尝试解析作为param发送的字符串。您可能希望在调用URL构造函数之前添加null检查。 此外,您还可以在提交请求时进行验证,将ant参数添加到名为“url”的请求URL中。由于您使用的是doGet,因此您必须通过点击某个网址发送请求。