Java 不应该';这不管用吗?显示来自servlet的错误消息

Java 不应该';这不管用吗?显示来自servlet的错误消息,java,jsp,servlets,error-handling,try-catch,Java,Jsp,Servlets,Error Handling,Try Catch,所以,我有一个servlet作为RSS提要项目的一部分,它接受URL,然后它继续做一些超出这个特定问题的其他事情。如果用户提交(通过表单)一个空白或无效的URL,我有以下代码: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { URL feedURL = null; try

所以,我有一个servlet作为RSS提要项目的一部分,它接受URL,然后它继续做一些超出这个特定问题的其他事情。如果用户提交(通过表单)一个空白或无效的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.senderro()
,或者其他一些方法,比如客户端的JavaScript

如果重要的话,请求来自JSP

一如既往,StackOverflow社区,提前感谢您的帮助

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;
} 
你应该在挡块中做一次返回。可能会从下一行抛出null指针,因为feedURL将为null。如果这不是原因,请共享您获得的空指针跟踪


在我看来,您应该从catch block转到一个错误页面

看起来您正在URL构造函数中获取NPE,它试图解析作为param发送的字符串。在调用URL构造函数之前,可能需要添加空检查。
此外,您还可以在提交请求时验证是否正在将it ant参数添加到名为“url”的请求url中。由于您使用的是doGet,因此必须通过单击某个url发送请求。

当您创建
java.net.url
类的实例时,其构造函数可能抛出
畸形异常。当URL无效时会发生这种情况

抛出它时,不是因为主机停机(其503),或者URL路径指向丢失的文件(其404

常见错误包括:- 1.遗漏一项协议 2.指定无效的协议 如www://stackoverlfow.com 3.省略“:”字符

MalformedURLException
将不会在以下情况下引发:-

  • 主机名无效。例如www.stack-overlfow.com
  • 路径无效。乙二醇
  • 如果URL字符串不可解析或包含不受支持的协议,它还将抛出一个
    MalformedURLException

    您将获得
    NullPointerException
    表示请求中缺少名为“url”的参数。仔细检查您的请求是否总是以“url”作为参数

    有很多方法可以告知客户出了什么问题

    您可以像这样使用`response.senderro()


    我不知道如何使用
    Javascript
    处理它。但是,您也可以转发到同一页面或错误页面,并将消息作为提到错误的参数传递。

    如果您使用的是Chrome或Firefox,请使用Chome Dev Tools或Firebug查看是否发布了任何名为“url”的参数。如果不是,则可能是空指针的原因。(这些工具可以通过F12键访问)您在哪一行获得NPE?NPE在堆栈跟踪中似乎引用的那一行在我的代码中不是行号。就像193,我只有大约100行代码。所以我真的很困惑,桑托什。你有过这样的经历吗?也许我读错了堆栈跟踪?谢谢,阿里。我差点忘了Firebug!感谢您解释如何使用Hardik的
    sendError
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    
    if (request.getParameter("important_parameter") == null) {
      response.sendError(response.SC_BAD_REQUEST, "Missing URL parameter");
    }