【问题标题】:Handling an exception in a servlet处理 servlet 中的异常
【发布时间】:2014-05-23 06:10:48
【问题描述】:

我正在处理我的一项任务。这是相当直截了当的。将包含单个输入的 HTML 表单提交给 Servlet,该 Servlet 获取参数,根据参数创建消息,将消息作为属性添加到请求中,并使用 requestdispatcher 转发到 jsp 以显示消息。

我有个需求,如果参数缺失,需要显示错误页面。问题是我不能明确地检查空值,或者使用 try/catch 块。我的猜测是目标是在 web.xml 页面中定义一个错误页面来处理某种类型的错误,但问题是,如果我无法检查请求参数是否为空,或者使用 try/catch ,我怎么知道我是否需要抛出异常?有什么想法吗?

【问题讨论】:

  • 阅读 servlet 异常处理程序以及如何将异常映射到这些处理程序。
  • 根据我的阅读,通常的做法是让 servlet 抛出某种异常,并允许容器处理它。问题是,如果我无法检查 null 或使用 try/catch,我不知道是否/何时抛出异常。
  • 只需将异常添加到处理您的请求的方法的签名中即可。
  • 但问题是我不知道是否应该抛出它,因为我无法检查参数是否为空或使用 try/catch。所有的工作都在 doGet() 中完成。
  • 啊,我以为其他东西已经抛出了异常,你想知道如何处理它。

标签: java jsp servlets


【解决方案1】:

在 web.xml 中,您可以指定一个错误页面,如下所示。
假设您要捕获 HTTP400、500 和异常:

<error-page>
    <error-code>400</error-code>
    <location>/errorpage.html</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/errorpage.html</location>
</error-page>

(根据 Arjit 的建议)

<error-page>  
   <exception-type>java.lang.Exception</exception-type>  
   <location>/errorpage.html</location>  
</error-page>

然后按照 DeveloperWJK 的建议将它们放在 servlet 中:

public void doGet(HttpServletRequest request, HttpServletResponse  response) throws IOException, ServletException, NullPointerException
{
       String param = request.getParameter("param");
       if(param.equals("x"))
       {
          response.sendRedirect("x.jsp");
          return;
       }
}

【讨论】:

    【解决方案2】:

    如果您打算根据参数创建消息,那么如果您无法检查参数值(例如 null),那么很难看出如何实现这一点。想必你叫...

    HttpServletRequest.getParameter()

    如果缺少参数,则返回参数值或null。

    【讨论】:

      【解决方案3】:

      web.xml 中,您也可以提及例外情况。

      <error-page>  
        <exception-type>java.lang.Exception</exception-type>  
        <location>/error.jsp</location>  
      </error-page>  
      

      或者您可以从此链接获取帮助来创建新的 servlet 来处理错误。 Servlet Exception Handling

      【讨论】:

      • 问题是关于 Servlet 而不是 JSP。
      【解决方案4】:

      通常检查你会做的空值:

             String param = request.getParameter("param");
             if(param!=null)
      

      如果他们不希望您这样做,可能他们希望您使用 DOT 运算符来引发 NullPointerExpection

      public void doGet(HttpServletRequest request, HttpServletResponse  response) throws IOException, ServletException, NullPointerException
      {
             String param = request.getParameter("param");
             if(param.equals("x"))
             {
                //if param was null, simply using 
                //the DOT operator on param would throw
                // the NullPointerExpection
                response.sendRedirect("x.jsp");
                return;
             }
          }
      

      为了避免显式检查 null 并避免 NullPointerExpection,您可以这样做:

       if("x".equals(param))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-13
        • 2010-12-24
        • 2013-08-13
        • 2011-12-26
        • 2014-05-11
        • 2019-04-17
        • 2019-10-08
        相关资源
        最近更新 更多