我正在尝试打印问题列表(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是否被正确触发
答案 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
文件夹中。