gpt4 book ai didi

java - 将 ListArray 从 Servlet 传递到在 Windows 中工作但在 Linux 中失败的 JSP
转载 作者:太空宇宙 更新时间:2023-11-04 11:04:26 25 4
gpt4 key购买 nike

将 ListArray 从我的 Servlet 传递到 JSP 页面的方法在我的 Windows 开发环境中运行良好,但在我的 Linux 环境中却失败了。

ListArray 包含一组全局值,因此我立即在 Servlet 类中声明它并在 Init 方法中填充它。

在 doGet 和 doPost 方法中,我将其分配给请求对象的一个​​属性:

    request.setAttribute("servers", servers);
request.getRequestDispatcher(page).forward(request, response);

在 .jsp 中我检索它并处理它:

<%

ArrayList<Server> servers = (ArrayList<Server>) request.getAttribute("servers");

for(Server server : servers){

out.print("<p><form method='post' action='Controller' encType='multipart/form-data'><input type='hidden' name='action' value='control'/>");
out.print("<input type='hidden' name='name' value='"
+ server.getName() + "'/>");
out.print("<input type='hidden' name='url' value='"
+ server.getUrl() + "'/>");
out.print("<input type='hidden' name='local' value='"
+ server.getLocation() + "'/>");
out.print("<input type='hidden' name='port' value='"
+ server.getPort() + "'/>");
out.print("<input type='submit' value='Select'/><span class='label'> "
+ server.getName() + " </span></form><p>");

}
%>

首先,是的,我知道 scriptlet 已被弃用,学习 JSTL 是本季度要做的事情之一。

在 Windows 中,这成功地将服务器对象处理成一个整洁的列表。在 Linux 中,它会像这样失败:

org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 82

79:
80: ArrayList<Server> servers = (ArrayList<Server>) request.getAttribute("servers");
81:
82: for(Server server : servers){
83:
84: out.print("<p><form method='post' action='Controller' encType='multipart/form-data'><input type='hidden' name='action' value='control'/>");
85: out.print("<input type='hidden' name='name' value='"


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause

java.lang.NullPointerException
org.apache.jsp.index_jsp._jspService(index_jsp.java:151)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.55 logs.

我在两个环境中都运行 Java 1.7.0_07。

有没有想过为什么这种传递数组列表的方法在 Linux 中会失败?

最佳答案

Any thoughts on why this method of passing the arraylist would be failing in Linux?

一种可能是 arraylist 为 null 或其元素之一或其元素的字段之一为 null。我怀疑这是在 servlet 中发生的……在您转发请求之前。

但是对此进行推测并不能​​帮助您解决问题。你需要做的是:

  • 将堆栈跟踪与编译后的 JSP 代码中的 Java 行号进行比较。
  • 找出导致异常的 Java 代码。
  • 对问题应用一些逻辑推理,找出 null 是...以及(最终)它来自哪里。

如果逻辑推理不起作用,请添加一些跟踪记录以找出 null 的来源。

很遗憾,我们没有证据可以为您执行此操作。

但好消息是您应该能够自己弄清楚。

关于java - 将 ListArray<Object> 从 Servlet 传递到在 Windows 中工作但在 Linux 中失败的 JSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25818055/

25 4 0