SearchBar.java

package control.search;

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 javax.sql.DataSource;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
import model.DBConnection;

@WebServlet("/SearchBar")
public class SearchBar extends HttpServlet {
    private static final String TABLE_NAME = "Maglietta";
    private static DataSource ds;
    private static final String ERROR_PAGE = "/pages/errorpage.jsp";

    public SearchBar() {
        ds = DBConnection.getDataSource();
    }

    public SearchBar(DataSource ds) {
        SearchBar.ds = ds;
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        String search = req.getParameter("search");
        if (search == null) {
            search = "";
        }

        String query = "SELECT * FROM " + TABLE_NAME +
                " WHERE Tipo <> 'Personalizzata' AND Tipo <> 'Eliminata' AND nome LIKE ?";

        try (Connection connection = ds.getConnection();
             PreparedStatement preparedStatement = connection.prepareStatement(query)) {

            preparedStatement.setString(1, "%" + search + "%");

            ResultSet resultSet = preparedStatement.executeQuery();
            List<Map<String, Object>> results = new ArrayList<>();

            ResultSetMetaData metaData = resultSet.getMetaData();
            int colonne = metaData.getColumnCount();

            while (resultSet.next()) {
                Map<String, Object> oggetto = new HashMap<>();
                for (int i = 1; i <= colonne; i++) {
                    oggetto.put(metaData.getColumnName(i), resultSet.getObject(i));
                }
                results.add(oggetto);
            }

            String lista = new Gson().toJson(results);

            writeJsonResponse(resp, lista);

        } catch (SQLException | IOException e) {
            req.getRequestDispatcher(ERROR_PAGE).forward(req, resp);
        }

    }

    private void writeJsonResponse(HttpServletResponse resp,
                                   String json) throws IOException {
        resp.setContentType("application/json");
        resp.setCharacterEncoding("UTF-8");
        resp.getWriter().write(json);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }
}