title: processRequest action parameter: NPE error in JSP
body: <p>I have a file index.html where I can look up a Student (by name and surname).
  I use a Servlet, StudentInfo, as controller. The POST request on index.html brings me to overview.jsp (hardcoded Students are available).
  The GET method looks up a Student and give it to me in result.jsp</p>
  
  <p>On result.jsp I have a GET that should bring me to overview.jsp, but I'm getting a NPE.</p>
  
  <p>I tried to make it work before while using the doGet()-method, and broke it now.</p>
  
  <p>My code is as follows:</p>
  
  <p><strong>Student class</strong></p>
  
  <blockquote>
    <p>package r0256160_Parameters2;</p>
  </blockquote>
  
  <pre><code>public class Student {
  private String voornaam;
  private String naam;
  private int leeftijd;
  private String richting;
  
  public Student(String naam, String voornaam, int leeftijd, String richting){
      this.voornaam=voornaam;
      this.naam=naam;
      this.leeftijd=leeftijd;
      this.richting=richting;
  }
  
  public String getVoornaam(){
      return voornaam;
  }
  public String getNaam(){
      return naam;
  }
  public int getLeeftijd(){
      return leeftijd;
  }
  public String getRichting(){
      return richting;
  }
  
  public String toString(){
       return getVoornaam() + " " + getNaam() + " " + getLeeftijd() + " " + getRichting();
  }
  </code></pre>
  
  <p>}</p>
  
  <p><strong>StudentService class</strong></p>
  
  <blockquote>
    <p>package r0256160_Parameters2;</p>
  </blockquote>
  
  <pre><code>import java.util.ArrayList;
  
  public class StudentenService {
  Student student1;
  Student student2;
  Student student3;
  Student student4;
  ArrayList&lt;Student&gt; lijst;
  
  public StudentenService(){
      student1 = new Student("Jonckers", "Els", 23, "Toegepaste Informatica");
      student2 = new Student("Meerhout", "Maarten", 21, "Chemie");
      student3 = new Student("Steegmans", "Elke", 16, "Vroedkunde");
      student4 =  new Student("Leysen", "Lore", 54, "Verpleegkunde");
  
      lijst = new ArrayList&lt;Student&gt;();
      lijst.add(student1);
      lijst.add(student2);
      lijst.add(student3);
      lijst.add(student4);
  }
  
  public int getLeeftijd(String gegevenNaam, String gegevenVoornaam){
      for(int i=0; i&lt;lijst.size(); i++){
          if(gegevenNaam.equalsIgnoreCase(lijst.get(i).getNaam()) &amp;&amp; gegevenVoornaam.equalsIgnoreCase(lijst.get(i).getVoornaam())){
              return lijst.get(i).getLeeftijd();
          }
      }
      return 0;
  }
  
  public String getRichting(String gegevenNaam, String gegevenVoornaam) {
      for(int i=0; i&lt;lijst.size(); i++){
          if(gegevenNaam.equalsIgnoreCase(lijst.get(i).getNaam()) &amp;&amp; gegevenVoornaam.equalsIgnoreCase(lijst.get(i).getVoornaam())){
              return lijst.get(i).getRichting();
          }
      }
      return null;
  }
  
  public String toString(){
      for(Student s : lijst){
          s.toString();
      }
      return null;
  }
  
  public ArrayList&lt;Student&gt; getList(){
      return lijst;
  }
  </code></pre>
  
  <p>}</p>
  
  <p><strong>Index.html</strong></p>
  
  <p><div class="snippet" data-lang="js" data-hide="false">
  <div class="snippet-code">
  <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;!DOCTYPE html&gt;
  &lt;html&gt;
  &lt;head&gt;
  &lt;meta charset="UTF-8"&gt;
  &lt;title&gt;Insert title here&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
   &lt;h1&gt;Voeg een nieuwe student toe:&lt;/h1&gt;
   &lt;form method="POST" action="StudentInfo?action=add"&gt;
    &lt;fieldset&gt;
     &lt;legend&gt;Naam-gegevens&lt;/legend&gt;
     &lt;p&gt;
      &lt;label for="naam"&gt;Naam:&lt;/label&gt; &lt;input id="naam" name="naam"
       type=text placeholder="Familienaam van Student" required&gt;
     &lt;/p&gt;
     &lt;p&gt;
      &lt;label for="voornaam"&gt;Voornaam:&lt;/label&gt; &lt;input id="voornaam"
       name="voornaam" type=text placeholder="Voornaam van Student"
       required&gt;
     &lt;/p&gt;
    &lt;/fieldset&gt;
    &lt;p&gt;
     &lt;label for="leeftijd"&gt;Leeftijd:&lt;/label&gt; &lt;input id="leeftijd"
      name="leeftijd" type=number min=0 max=99 placeholder="Leeftijd van Student"
      required&gt;
    &lt;/p&gt;
    &lt;p&gt;
     &lt;label for="richting"&gt;Richting:&lt;/label&gt; &lt;input id="richting"
      name="richting" type=text placeholder="Richting van Student"
      required&gt;
    &lt;/p&gt;
    &lt;input type="submit" value="Voer in"&gt;
   &lt;/form&gt;
  
   &lt;h1&gt;Zoek een bestaande student op&lt;/h1&gt;
   &lt;form action="StudentInfo?action=find"&gt;
    &lt;p&gt;
     &lt;label for="naam"&gt;Naam: &lt;/label&gt; &lt;input id="naam" name="naam"
      type=text required&gt;
    &lt;/p&gt;
    &lt;p&gt;
     &lt;label for="voornaam"&gt;Voornaam: &lt;/label&gt; &lt;input id="voornaam"
      name="voornaam" required&gt;
    &lt;/p&gt;
    &lt;p&gt;
     &lt;input type="submit" value="Zoek!"&gt;
    &lt;/p&gt;
   &lt;/form&gt;
  &lt;/body&gt;
  &lt;/html&gt;</code></pre>
  </div>
  </div>
  </p>
  
  <p><strong>Overview.jsp</strong></p>
  
  <p><div class="snippet" data-lang="js" data-hide="false">
  <div class="snippet-code">
  <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%&gt;
  &lt;%@ page import="java.util.ArrayList" %&gt;
  &lt;%@ page import="r0256160_Parameters2.Student" %&gt;
  &lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
  &lt;html&gt;
  &lt;head&gt;
  &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
  &lt;title&gt;Insert title here&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
  &lt;h1&gt;Lijst van alle studenten: &lt;/h1&gt;
  &lt;%
  ArrayList&lt;Student&gt; lijst = (ArrayList&lt;Student&gt;) request.getAttribute("lijst");
  
  for(int i=0; i&lt;lijst.size(); i++){
   out.println("&lt;p&gt;");
   out.println(lijst.get(i).toString());
   out.println("&lt;/p&gt;");
  }
  %&gt;
  
  &lt;a href="index.html"&gt;Ga naar index&lt;/a&gt;
  &lt;/body&gt;
  &lt;/html&gt;</code></pre>
  </div>
  </div>
  </p>
  
  <p><strong>result.jsp</strong></p>
  
  <p><div class="snippet" data-lang="js" data-hide="false">
  <div class="snippet-code">
  <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%&gt;
  &lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
  &lt;html&gt;
  &lt;head&gt;
  &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
  &lt;title&gt;Insert title here&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
  &lt;p&gt; Student &lt;%= request.getParameter("naam") %&gt; &lt;%= request.getParameter("voornaam") %&gt; is &lt;%= request.getAttribute("leeftijd") %&gt; jaar oud en studeert &lt;%= request.getAttribute("richting") %&gt; &lt;/p&gt;
  &lt;!-- &lt;a href="StudentInfo"&gt;Ga naar overview&lt;/a&gt; --&gt;
  &lt;a href="StudentInfo?action=read"&gt;Ga naar overview &lt;/a&gt;
  
  
  &lt;/body&gt;
  &lt;/html&gt;</code></pre>
  </div>
  </div>
  </p>
  
  <p>And finally, the Servlet StudentInfo</p>
  
  <p><div class="snippet" data-lang="js" data-hide="false">
  <div class="snippet-code">
  <pre class="snippet-code-html lang-html prettyprint-override"><code>package r0256160_Parameters2;
  
  import java.io.IOException;
  import java.util.Enumeration;
  
  import javax.servlet.RequestDispatcher;
  import javax.servlet.ServletException;
  import javax.servlet.annotation.WebServlet;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  /**
   * Servlet implementation class StudentInfo
   */
  @WebServlet("/StudentInfo")
  public class StudentInfo extends HttpServlet {
   private static final long serialVersionUID = 1L;
   public StudentenService service = new StudentenService();
  
   /**
    * @see HttpServlet#HttpServlet()
    */
   public StudentInfo() {
    super();
    // TODO Auto-generated constructor stub
   }
  
   /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
    *      response)
    */
   protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
    
    processRequest(request,response);
    // String naam = request.getParameter("naam");
    // String voornaam = request.getParameter("voornaam");
  
    // StudentenService service = new StudentenService();
    /*
     * Enumeration parameters = request.getParameterNames(); boolean metpara
     * = parameters.hasMoreElements();
     * 
     * if(metpara){
     * 
     * request.setAttribute("leeftijd", service.getLeeftijd(naam,
     * voornaam)); request.setAttribute("richting",
     * service.getRichting(naam, voornaam));
     * 
     * 
     * RequestDispatcher view = request.getRequestDispatcher("result.jsp");
     * view.forward(request, response);
     * 
     * } else {
     * 
     * request.setAttribute("lijst", service.getList()); RequestDispatcher
     * overview = request.getRequestDispatcher("overview.jsp");
     * overview.forward(request, response); }
     */
   }
  
   /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
    *      response)
    */
   protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
    
    processRequest(request,response);
    /*String naam = request.getParameter("naam");
    String voornaam = request.getParameter("voornaam");
    String strLeeftijd = request.getParameter("leeftijd");
    int leeftijd = Integer.parseInt(strLeeftijd);
    String richting = request.getParameter("richting");*/
  
    /*
     * if(naam == null || voornaam == null || strLeeftijd == null ||
     * richting == null){ RequestDispatcher view =
     * request.getRequestDispatcher("index.html"); view.forward(request,
     * response); }
     */
  
    /*service.lijst.add(new Student(naam, voornaam, leeftijd, richting));
    request.setAttribute("lijst", service.getList());
    RequestDispatcher overview = request
      .getRequestDispatcher("overview.jsp");
    overview.forward(request, response);*/
   }
  
   protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
    String destination = "index.html";
    String action = request.getParameter("action");
    // String naam = request.getParameter("naam");
  
    if (action.equals("read")) {
     destination = toonLijst(request, response);
    } else if (action.equals("find")) {
     destination = vindPersoon(request, response);
    } else if (action.equals("add")){
     destination = voegToe(request,response);
    }
    
  
    RequestDispatcher view = request.getRequestDispatcher(destination);
    view.forward(request, response);
   }
  
   private String toonLijst(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setAttribute("lijst", service.getList());
    return "overview.jsp";
   }
  
   private String vindPersoon(HttpServletRequest request,
     HttpServletResponse response) throws ServletException, IOException {
    String naam = request.getParameter("naam");
    String voornaam = request.getParameter("voornaam");
    
    request.setAttribute("leeftijd", service.getLeeftijd(naam, voornaam));
    request.setAttribute("richting", service.getRichting(naam, voornaam));
  
    return "result.jsp";
   }
   
   private String voegToe(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String naam = request.getParameter("naam");
    String voornaam = request.getParameter("voornaam");
    String strLeeftijd = request.getParameter("leeftijd");
    int leeftijd = Integer.parseInt(strLeeftijd);
    String richting = request.getParameter("richting");
    
    service.lijst.add(new Student(naam, voornaam, leeftijd, richting));
    request.setAttribute("lijst", service.getList());
    
    return "overview.jsp";
   }
  
  }</code></pre>
  </div>
  </div>
  </p>
  
  <p>The code I used in the doGet() and doPost() are still there.
  Eclipse tells me that, in processRequest() (method in the servlet) the local variables action and destination are not used.
  I don't understand how, since I'm using them in my if-statements.</p>
  
  <p>The error I get when browsing from result.jsp to overview.jsp (using StundentInfo?action="read" is:</p>
  
  <p><div class="snippet" data-lang="js" data-hide="false">
  <div class="snippet-code">
  <pre class="snippet-code-html lang-html prettyprint-override"><code>HTTP Status 500 -
  
  type Exception report
  
  message
  
  description The server encountered an internal error that prevented it from fulfilling this request.
  
  exception
  
  java.lang.NullPointerException
   r0256160_Parameters2.StudentenService.getLeeftijd(StudentenService.java:27)
   r0256160_Parameters2.StudentInfo.doGet(StudentInfo.java:42)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
   org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
  
  note The full stack trace of the root cause is available in the Apache Tomcat/7.0.47 logs.</code></pre>
  </div>
  </div>
  </p>
  
  <p>I honestly don't understand what I am doing wrong.</p>
  
  <p>Any help would be hugely appreciated.</p>
  
  <p>Thank you</p>