Problemas com API Commons Upload files e Multipart/form-data

Boa noite,
Tudo bom?

Estou tentando desenvolver um código simples para poder implementar no meu tcc mas estou com alguns problemas e queria ver se alguém poderia me ajudar.
Seguinte… Preciso pegar os dados de um form composto por 3 campos de texto e um de arquivo(os campos de texto serão enviados para o banco e o arquivo para uma pasta). O problema é que se eu retirar a tag Multipart/form-data do cabeçalho do formulário ele envia os campos de texto para o banco de dados sem problemas sem problemas, mas se eu deixar esta tag no formulário aparece este seguinte erro:


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
controller.Ctr.processRequest(Ctr.java:37)
controller.Ctr.doPost(Ctr.java:132)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.35 logs.


Segue o código:

index.jsp

[code]<%–
Document : index
Created on : 03/03/2013, 22:36:55
Author : Bruno Cesar
–%>

<%@page contentType=“text/html” pageEncoding=“UTF-8”%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>
<title>JSP Page</title>
</head>
<body>

    &lt;form action="Ctr" method="post" enctype="multipart/form-data" &gt; 
    &lt;label&gt;nome do arquivo&lt;/label&gt; <br />
    &lt;input name="nome_arquivo" type="text" id="nome_arquivo" /&gt;<br />
    &lt;label&gt;tipo do arquivo&lt;/label&gt;<br />
    &lt;input name="tipo_arquivo" type="text" id="tipo_arquivo" /&gt;<br />
    &lt;label&gt;area de atuacao&lt;/label&gt;<br />
    &lt;input name="area_atuacao" type="text" id="area_atuacao" /&gt;<br />
    
    &lt;input type="file" name="arquivo"&gt;  
    &lt;input type="hidden" name="acao" value="incluir_usuario"&gt;  
    &lt;input type="submit"&gt;  
    &lt;/form&gt;  
    
   
&lt;/body&gt;

</html>
[/code]

Ctr.java


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import dao.UsuarioDao;
import info.Info;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;



/**
 *
 * @author Bruno Cesar
 */
public class Ctr extends HttpServlet {
    
     protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, FileUploadException {
        String acao = request.getParameter("acao");
        int retorno;
        
        
        if (acao.equalsIgnoreCase("incluir_usuario")) {
            Info inf = new Info();
            
            String name = request.getParameter("nome_arquivo");
            inf.setNome_arquivo(name);
            
            String tipo = request.getParameter("tipo_arquivo");
            inf.setTipo_arquivo(tipo);
            
            String area = request.getParameter("area_atuacao");
            inf.setArea_atuacao(area);
            
            UsuarioDao dao = new UsuarioDao();
            
            int conectar = dao.conectar();
            if (conectar != 1) {
                request.setAttribute("erro", "Não conectou ao banco...");
                request.getRequestDispatcher("incluirUsuario.jsp").forward(request, response);
            }
            retorno = dao.arquivar(inf);
            if (retorno != 1) {
                request.setAttribute("erro", "Erro ao incluir usuário...");
                request.getRequestDispatcher("index.jsp").forward(request, response);
            } else {
                request.getRequestDispatcher("index.jsp").forward(request, response);
            }
            
            
            
            boolean isMultipart = FileUpload.isMultipartContent(request);  
            if (isMultipart) {  
               // Create a new file upload handler  
               DiskFileUpload upload = new DiskFileUpload();  

               // Set upload parameters  
               upload.setSizeMax(50*1024*1024); //50Mb  
               upload.setRepositoryPath("c:/apache");  

               // Parse the request  
               List items = upload.parseRequest(request);  

               Iterator it = items.iterator();  
               while (it.hasNext()) {  
                  FileItem item = (FileItem) it.next();  
         
                  if (!item.isFormField()){
             
                    byte[]  arquivo = item.get();

                       request.setAttribute("content", item.getContentType());

                       request.setAttribute("size", item.getSize());

                       request.getRequestDispatcher("index.jsp").forward(request, response);
                 }     
              }  
      }  
            
            
            
        }
        
        

    }

    // &lt;editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."&gt;
    /** 
     * Handles the HTTP &lt;code&gt;GET&lt;/code&gt; method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (FileUploadException ex) {
            Logger.getLogger(Ctr.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** 
     * Handles the HTTP &lt;code&gt;POST&lt;/code&gt; method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (FileUploadException ex) {
            Logger.getLogger(Ctr.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// &lt;/editor-fold&gt;
}

UsuarioDao.java


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import info.Info;
import java.sql.*;
/**
 *
 * @author Bruno Cesar
 */
public class UsuarioDao {
    
    Connection c;
    Statement s;
    PreparedStatement ps;
    ResultSet rs;
    String sql;

    public UsuarioDao() {
    }
    
     public int conectar() {
         try {
            Class.forName("com.mysql.jdbc.Driver");
            c = DriverManager.getConnection("jdbc:mysql://localhost/teste","root", "admin");
            return 1;
        } catch (ClassNotFoundException cnfe) {
            return 2;
        } catch (SQLException sqle) {
            return 0;
        }
    }
     
      public int arquivar(Info inf){
        sql = "INSERT INTO uploadestudo (nome_arquivo, tipo_arquivo, area_atuacao) VALUES (?,?,?)";
        try{
            ps = c.prepareStatement(sql);
            ps.setString(1,inf.getNome_arquivo());
            ps.setString(2,inf.getTipo_arquivo());
            ps.setString(3,inf.getArea_atuacao());
            ps.executeUpdate();
            return 1;
        } catch (SQLException sqle) {
            return 0;
        }
    }
    
}

info.java



/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package info;

/**
 *
 * @author Bruno Cesar
 */
public class Info implements java.io.Serializable {
    
    private String nome_arquivo;
    private String tipo_arquivo;
    private String area_atuacao;
    
    public Info(){
        
    }
    
    public String getNome_arquivo(){
        return nome_arquivo;
    }
    
    public String getTipo_arquivo(){
        return tipo_arquivo;
    }
    
    public String getArea_atuacao(){
        return area_atuacao;
    }
    
    public void setNome_arquivo(String nome_arquivo){
        this.nome_arquivo = nome_arquivo;
    }
    public void setTipo_arquivo(String tipo_arquivo){
        this.tipo_arquivo = tipo_arquivo;
    }
    public void setArea_atuacao(String area_atuacao){
        this.area_atuacao = area_atuacao;
    }
}

Alguém poderia me dar uma luz sobre o que pode ser isso?
Muito obrigado e agradeço desde já!

Verifica qual o valor da variável acao antes da linha 37.
É uma boa prática colocar a constante na esquerda em um IF. Exemplo:

 if ("incluir_usuario".equalsIgnoreCase(acao)) {  

Não resolveu.
Não sei o que pode estar errado.
Eu testei enviar somente os dados do form pro banco e o arquivo para a pasta separadamente e deu certo, mas quando eu junto os dois ele não envia nem um e nem o outro.

Você vai ter que debugar e ver onde a exception está sendo lançada.