将列表从Servlet传递给Jsp,给出空指针异常

时间:2011-12-01 17:28:43

标签: jsp servlets

我正在尝试打印问题列表(questionList)。当表单加载时,列表的元素应作为标签打印。

在我的java文件中,我将返回一系列问题。

在我的servlet代码中:

ArrayList<String> questionList = qd.getFormLabels();
request.setAttribute("question", questionList);
System.out.println("Hello World " + questionList);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/Home.Index.jsp");
if (rd != null){    
rd.forward(request, response);
return;

在我的jsp代码中,当我访问此列表时,它给了我一个空指针异常。

jsp的代码:

<%

ArrayList<String> LabelList = (ArrayList)request.getAttribute("question");
out.println(LabelList.size());

if(LabelList.isEmpty()==false)
    {
        for( int i = 0; i< LabelList.size(); i++)
        {%>
            <tr><td><%out.println(LabelList.get(i)); %></td></tr>

当我尝试打印尺寸时,它给出null。 请告诉我流程是否正确并且servlet是否被正确触发

1 个答案:

答案 0 :(得分:0)

只有在您没有通过其URL调用servlet时才会发生这种情况。基于这些注释,您似乎实际上是通过其URL直接调用JSP,并且您似乎不了解servlet映射。

好吧,为了让servlet在JSP中显示结果之前预处理HTTP请求,您需要在web.xml 中的URL模式上映射servlet并隐藏JSP远离/WEB-INF文件夹,因此永远不能直接调用它,也不是偶然的,因此您始终可以确保只能通过调用servlet来显示JSP。

例如,这在web.xml

<servlet>
    <servlet-name>home</servlet-name>
    <servlet-class>com.example.controller.HomeServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>home</servlet-name>
    <url-pattern>/home</url-pattern>
</servlet-mapping>

请注意<url-pattern>的{​​{1}}。这需要注意http://localhost:8080/contextname/home可以调用servlet,其中“/ contextname”实际上是你的webapp的上下文名称。当您在浏览器地址栏中输入该URL或单击指向该URL的链接/书签时,将调用servlet的/home方法。您只需要更改doGet()

RequestDispatcher

以下更简单,更规范的形式

RequestDispatcher rd = getServletContext().getRequestDispatcher("/Home.Index.jsp");
if (rd != null){    
rd.forward(request, response);

您还需要将JSP文件移动到该路径上的request.getRequestDispatcher("/WEB-INF/home.jsp").forward(request, response); 文件夹中。我为了清晰起见重命名了JSP文件名。 /WEB-INF是一个相当奇怪的名字。如果需要,您可以随时重命名,只要它在Home.Index.jsp文件夹中。

另见: