【问题标题】:Java - NullPointerException with JSP/Servlet sample?Java - 带有 JSP/Servlet 示例的 NullPointerException?
【发布时间】:2023-03-23 12:56:01
【问题描述】:

多年后,我正在尝试再次进入 Java。好吧,我正在使用 Eclipse IDE 和 Glassfish Server 3.1.2 从教程中制作一个 servlet 示例。该示例只是一个将数据发送到另一个.jsp 的表单。表单被发送到 servlet,servlet 在输出 .jsp 上设置一个 Java Bean。

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Encuesta de Desarrolladores</title>
</head>
<body>
   <h1>Bienvenido a la encuesta de desarrolladores!</h1>
   <p>Indica los lenguajes de programación con los que estas familiarizado</p>
   <form action="ServletController" method="post">
      <table> 
          <tr>
            <td>Nombre Completo:</td>
            <td><input type="text" name="nombreCompleto" value=""/></td>
          </tr>
          <tr>
            <td>Java:</td>
            <td><input type="checkbox" name="progLeng" value="java"/></td>
          </tr>
          <tr>
            <td>PHP:</td>
            <td><input type="checkbox" name="progLeng" value="php"/></td>
          </tr>
          <tr>
            <td>Python:</td>
            <td><input type="checkbox" name="progLeng" value="python"/></td>
          </tr>
          <tr>
            <td>Ruby:</td>
            <td><input type="checkbox" name="progLeng" value="ruby"/></td>
          </tr>
          <tr>
            <td></td>
            <td><input type="submit" value="Enviar"/></td>
          </tr>
      </table>
   </form>
</body>
</html>

ServletController.java

package com.j2ee.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.j2ee.bean.DatosEncuesta;;


@WebServlet(name="ServletController", urlPatterns ={"/ServletController"})
public class ServletController extends HttpServlet {
    private static final long serialVersionUID = 1L;


    public ServletController() {
        super();
        // TODO Auto-generated constructor stub
    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        func(request, response);
    }

    protected void func(HttpServletRequest req, HttpServletResponse res)  throws ServletException, IOException
    {
        DatosEncuesta datosEncuesta = new DatosEncuesta();
        datosEncuesta.setNombreCompleto(req.getParameter("nombreCompleto"));
        datosEncuesta.setProgLeng(req.getParameterValues("progLeng"));
        req.setAttribute("datosEncuesta", datosEncuesta);
        req.getRequestDispatcher("salida.jsp").forward(req, res);
    }
}

salida.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Gracias!</title>
</head>
<body>
  <h2>Gracias por cubrir nuestra encuesta!</h2>
  <p>
    <jsp:getProperty name="DatosEncuesta" property="nombreCompleto" />
    Nos has indicado que estas familiarizado con los siguientes lenguajes de programación:
    <jsp:useBean id="DatosEncuesta" scope="request" class="com.j2ee.bean.DatosEncuesta" />
   </p>
    <ul>
    <%
        System.out.println("Llegue a JSP!");
        String[] lenguajesSeleccionados = DatosEncuesta.getProgLeng();
         if(lenguajesSeleccionados != null)
         {
             for(int i=0; i<lenguajesSeleccionados.length; i++){
    %>
      <li>
         <%=lenguajesSeleccionados[i] %>
      </li>
     <% }
     }%>
    </ul>
</body>
</html>

我会放置 java bean,但这很明显。基本上它是一个字符串和一个字符串 [](包括 getter 和 setter)。 “DatosEncuesta”类型,您在代码中看到。

当我运行它时,由于某种原因,我得到了 NullPointerException。起初我以为是没有 web.xml,但我读到了注释的东西。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 你究竟在哪里得到空指针异常,你能粘贴堆栈跟踪吗?
  • 是的,这一行让我明白了重点:在 com.j2ee.servlet.ServletController.func(ServletController.java:40) 在 com.j2ee.servlet.ServletController.doPost(ServletController. java:28) 但我不明白为什么 RequestDispatcher 会产生那个错误? =S
  • 问题解决了吗?
  • 关于 NullPointerException,是的。我只是想弄清楚为什么会出现“null”,而不是从主页发送的选项。

标签: java eclipse jsp servlets glassfish


【解决方案1】:

尝试切换jsp:useBean and jsp:getProperty的位置 此外,异常跟踪将帮助人们找出问题所在。

【讨论】:

  • 酷!它奏效了,现在我进入了它......只是一个小问题。在输出页面中,出现“null”打印在

    前面。为什么会这样? =s 当我在输出页面中使用 jsp 标签时,我是否以某种方式滥用了 bean?

  • 尝试在 jsp 上添加这个“”,看看它是否解决了你的“null”问题
  • 对不起,没用。打印出相同的“null”。此外,我认为 useBean 已经有了。
  • 我找到了答案!当我在来自 servlet 的请求中设置属性时,useBean id 属性的名称必须与该属性相同。现在它们匹配,它出现了。非常感谢! =)
【解决方案2】:

jsp:useBeanjsp:getProperty 不是从请求对象获取值的正确方法。只需将您的 salida.jsp 替换为以下代码即可。它将打印从 index.jsp 中选择的复选框。如果还有问题,请告诉我。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ page import="com.j2ee.bean.DatosEncuesta;"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Gracias!</title>
    </head>
    <body>
    <h2>Gracias por cubrir nuestra encuesta!</h2>
    <p>
    <ul>

        <%
            DatosEncuesta objects = (DatosEncuesta) request.getAttribute("datosEncuesta");
        %>

        <%
            System.out.println("Llegue a JSP!");
            String[] lenguajesSeleccionados = objects.getProgLeng();
            if (lenguajesSeleccionados != null) {
                for (int i = 0; i < lenguajesSeleccionados.length; i++) {
        %>
        <li><%=lenguajesSeleccionados[i]%></li>
        <%
            }
            }
        %>
    </ul>
</body>
</html>

【讨论】:

  • 我刚刚使用上述代码创建了一个示例 Web 应用程序并测试成功。
猜你喜欢
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 2013-07-01
  • 2012-12-26
  • 1970-01-01
  • 2015-09-22
相关资源
最近更新 更多