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