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

将一个列表从Servlet传递到Jsp,给出空指针异常,jsp,servlets,Jsp,Servlets,我正在尝试打印问题列表(问题列表)。当表单加载时,列表中的元素应作为标签打印 在我的java文件中,我返回一个问题列表 在我的servlet代码中: ArrayList<String> questionList = qd.getFormLabels(); request.setAttribute("question", questionList); System.out.println("Hello World " + questionList); RequestDispatcher

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

在我的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;
ArrayList questionList=qd.getFormLabels();
request.setAttribute(“问题”,问题列表);
System.out.println(“你好世界”+问题列表);
RequestDispatcher rd=getServletContext().getRequestDispatcher(“/Home.Index.jsp”);
如果(rd!=null){
转发(请求、响应);
回来
在我的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是否被正确触发,这只有在您没有通过URL调用servlet时才会发生。根据注释,您似乎实际上是通过URL直接调用JSP,并且您似乎不理解servlet映射

好的,为了让servlet在JSP中显示结果之前对HTTP请求进行预处理,您需要将servlet映射到
web.xml
中的URL模式上,并将JSP隐藏在
/web-INF
文件夹中,这样它就永远不会被直接调用,也不会被意外调用,因此您可以始终确保SP只能通过调用servlet来显示

例如,在
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>
到以下更简单、更规范的形式

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

另见:
  • -解释servlet如何工作,并包含具体的Hello World示例

除了“ew?!”在一些级别上,只有少数几种可能性,比如列表为空、错误的JSP等等。浏览器地址栏中的URL是什么?是servlet的URL还是转发的JSP之一?在
web.xml
中是否有任何过滤器?顺便说一句,您应该使用
ServletRequest
中的请求分派器,而不是
ServletContexte> :
request.getRequestDispatcher(…)
@BalusC查找显式请求修饰符的要点很好。当应用程序启动时,URL是/Home.Index.jsp。我将请求转发到此URL,因为数据将显示在此jsp上。谢谢Dave。但当我在servlet中打印列表及其大小时,它会给我正确的大小和正确的输出。我认为请求是not正确地转发到jsp。但是我无法理解它。
request.getRequestDispatcher("/WEB-INF/home.jsp").forward(request, response);