0

每当我尝试使用从我的方法调用的此调度方法重定向到某个页面时doGet,我都会收到以下异常。我不知道为什么!

帐户控制器 servlet

protected void dispatch(HttpServletRequest request,
            HttpServletResponse response, String page)
            throws javax.servlet.ServletException, java.io.IOException {
        RequestDispatcher dispatcher = getServletContext()
                .getRequestDispatcher(page);
        try {
            dispatcher.forward(request, response);
        } catch (java.lang.NullPointerException e) {
            System.out.println("NullPointerException: attribute expected in view");
        }
    }

错误信息

    java.lang.NullPointerException
        org.apache.jasper.JasperException: java.lang.NullPointerException
        org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:502)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:430)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        controller.AccountController.dispatch(AccountController.java:91)
        controller.AccountController.doExecute(AccountController.java:72)
        controller.AccountController.doGet(AccountController.java:34)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    java.lang.NullPointerException
        org.apache.jsp.content.edit_jsp._jspService(edit_jsp.java:109)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        controller.AccountController.dispatch(AccountController.java:91)
        controller.AccountController.doExecute(AccountController.java:72)
        controller.AccountController.doGet(AccountController.java:34)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
4

3 回答 3

0

我发现了 NullPointerException 背后的原因:servlet 和 JSP 中的请求参数不匹配。JSP 需要一个不存在的参数以触发异常。

小服务程序:

request.setAttribute("Account", currentClient);
request.setAttribute("RentFilmList", rentFilmList);

dispatch(request, response, ApplicationRessource.getInstance()
                    .getAccountPage());

JSP

<%
    ClientBean client = (ClientBean)request.getAttribute("Account");
    ArrayList<FilmBean> rentFilmList = (ArrayList<FilmBean>)request.getAttribute("RentFilmList");
%>
于 2012-07-09T03:08:40.053 回答
0

调用该方法时检查页面字符串的值。

getServletContext().getRequestDispatcher(page);正在返回 null,因此当您尝试在调度程序上调用 forward 时,您会得到一个 NPE。

我怀疑页面字符串是空的,或者它不是您在进入该方法时所认为的那样。

于 2012-07-02T16:51:14.660 回答
0

您必须检查是否RequestDispatcher dispatcher = getServletContext() .getRequestDispatcher(page);返回null,因为

This method returns `null` if the servlet container cannot return a
RequestDispatcher.

getRequestDispatcher
像下面的代码:

try {
      if(dispatcher!=null){
        dispatcher.forward(request, response);
      }
    } catch (java.lang.NullPointerException e) {
        System.out.println("NullPointerException: attribute expected in view");
    }
于 2012-07-02T16:57:21.617 回答