Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Problemas con ServletContextListener

22 de enero de 2015

Buenas tengo el siguiente problema, estoy haciendo un ejercicio y tengo creado un ArrayList en una clase que implementa ServletContextListener y lo tengo que llamar desde otro servlet para almacenar objetos dentro del ArrayList adjunto el código:

Clase con ServletContextListener

import java.util.ArrayList;
 
import javax.servlet.*;
 
/**
 *
 * @author tanGoO-Droid
 */
public class InitContext implements ServletContextListener {
 
    /**
     * Default constructor. 
     */
    public InitContext() {
        // TODO Auto-generated constructor stub
    }
 
    /**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    public void contextInitialized(ServletContextEvent e)  { 
 
        ServletContext cntxt = e.getServletContext();
        ArrayList<ObservacioMeteorologica> observacions = new ArrayList<ObservacioMeteorologica>();
        cntxt.setAttribute("arr1", observacions);
        // Creem un atribut de context, en el moment en què s'inicialitza l'aplicació,
        // que conté un valor de tipus Long inicialitzat a 0.
        //e.getServletContext().setAttribute("comptador", new Long(0));
    }
 
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
 
    } 
}

Clase donde llamo a el arraylist:

public class RegistrarObservacio extends HttpServlet
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
    IOException {
        // TODO Auto-generated method stub
        // obtiene los valores del formulario
        String mun = req.getParameter("Municipi");
        String data = req.getParameter("Dobservacio");
        Double TempMax = Double.parseDouble(req.getParameter("TMAX"));
        Double TempMin = Double.parseDouble(req.getParameter("TMIN"));
        Double Prec = Double.parseDouble(req.getParameter("Precipitacions"));
        Date fecha = null;
 
        SimpleDateFormat sdf= new SimpleDateFormat("dd-MM-yyyy");
        try {
            fecha = sdf.parse(data);
        } catch (ParseException ex) {
        }
        if (mun == null | data == null) {
            resp.sendRedirect("entrarObservacio.html");
        } else {
            ArrayList<ObservacioMeteorologica> observacions;
            observacions = (ArrayList<ObservacioMeteorologica>) getServletContext().getAttribute("arr1");
            ObservacioMeteorologica obmet = new ObservacioMeteorologica(mun, fecha, TempMax, TempMin, Prec);
            observacions.add(obmet);
            req.setAttribute("d", obmet);
            req.getSession().setAttribute("observacio", observacions);
            req.getRequestDispatcher("DadesOK.jsp").forward(req, resp);
        }
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
    }
 
    /*public void service(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
 
    }*/
}

Y el error que me devuelve:

java.lang.NullPointerException
appmeteo.RegistrarObservacio.doGet(RegistrarObservacio.java:46)
javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)