【问题标题】:<error-page> is not working for servlet<error-page> 不适用于 servlet
【发布时间】:2016-08-16 14:11:44
【问题描述】:

当 servlet 中的异常不工作但对于 jsp 正常工作时

web.xml 代码

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

servlet 代码

protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException 
{
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /*
             * TODO output your page here. You may use following sample code.
             */
          String a=null;
          a.toString();//this line will throw exception
        } 
finally {            
            out.close();
        }
}

它不会重定向到error.jsp

【问题讨论】:

  • 我猜你的服务器日志中有一个特定的错误:“响应已经提交”。请检查日志文件。
  • @Gimby ,服务器日志中没有异常。我无法理解为什么它没有被执行。请建议
  • 尝试将引发异常的代码移到代码的最顶部(response.getWriter() 上方),看看是否会有所不同。

标签: java apache jsp servlets web.xml


【解决方案1】:

Servlet 代码 这会将异常抛出到一般错误页面

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
           // response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try {
                /*
                 * TODO output your page here. You may use following sample code.
                 */
               String a=null;
               a.toString();

            }
            catch(Exception e)
            {
                throw new ServletException(e);
            }

            finally {            
                //dont write out.close();
            }
        }

【讨论】:

    【解决方案2】:

    当我们在 servlet 中编写 catch 块时,它不起作用,而当我们不编写 catch 块时,它可以正常工作。 小服务程序代码

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException{
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            DAL db=null;
            ResultSet rs=null;
               parameter p1=new parameter();
    
              // Object param[];
              // List<Object> param=new ArrayList<Object>();
               long myId=0;
            try {
    
    
               db=new DAL();
               String name=request.getParameter("fn");
               db.setQuery("{call usp_StudentInsertData(?,?)}"); 
               db.setInParam(1,name);
               db.setInParam(2,1000);
               db.insertUpdate();
               out.println("insert");
               response.sendRedirect("home.jsp");
               } 
            catch(Exception e)
            {
    
            }
            finally {            
               }
        }
    

    【讨论】:

    • 你能在这里解释一下吗?
    猜你喜欢
    • 2017-11-11
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2012-08-01
    • 1970-01-01
    • 2019-09-10
    相关资源
    最近更新 更多