Witam. :)
To moja pierwsza przygoda z językiem Java... Serwlet (metoda GET) ma wykonywać proste obliczenia matematyczne i zapisywać je do bazy danych. Załadowanie sterownika bazy danych i nawiązanie połączenia z nią ma wykonać się tylko raz, podczas uruchamiania serwletu.
Nawiązanie połączenia z bazą danych JDBC nie stanowi problemu. Na stronie www (właściwie index.jsp środowiska netbeans) umieściłem kilka chceckbox-ów. Jeśli podczas uruchamiania serwletu baza danych nie istnieje, to:
a. jest tworzona, gdy jeden z chceckbox-ów jest zaznaczony,
b. nie jest tworzona, jeśli wspomniany chceckbox nie jest zaznaczony (dane wypisywane są tylko na ekran).
Sama realizacja tworzenia, lub nie, bazy danych nie stanowi problemu. Problemem dla mnie jest przekazanie statusu chceckbox-u przy ładowaniu serwletu - poprzez metodę init(). Nie za bardzo wiem jak przekazać do niej HttpServletRequest req, jeśli w ogóle jest to w takim układzie możliwe. Jakkolwiek próbowałem to zapisać otrzymywałem wyjątek NullPointerException przy próbie pobierania wartości chceckbox-u (dbOpts). Co jak sądzę jest powodowane tym, że HttpServletRequest req jest niejako niezdefiniowane w metodzie init(). W dalszej części kodu (metoda doPost0) taki sposób pobierania wartości checkbox-u - jak w kilku pierwszych linijkach metody init() - działa bezproblemowo.
Poniżej okrojony fragment kodu programu. Zdaję sobie sprawę z tego, że to nie jest poprawny kod, ale bardziej chodziło mi o pokazanie w którym miejscu, i co chciałbym mieć = req.getParameterValues("dbOpts") "widzialne" w metodzie init(). Byłbym wdzięczny za pomoc w naprowadzeniu na właściwy trop. Pozdrawiam. :)
public class MyServlet extends HttpServlet {
ServletConfig cfg;
Connection con;
@Override
public void init() {
boolean dbOptFlag = true; //Flaga on/off.
//Opcje bazy danych... **Tutaj chciałbym odczytać status chceckbox-u**
if (req.getParameterValues("dbOpts") != null) {
String[] dbOpts = req.getParameterValues("dbOpts");
/*for (int i = 0; i < dbOpts.length; i++) {
System.out.println(" : " + dbOpts[i]);
}*/
} else {
dbOptFlag = false; //Żadna opcja bazy danych nie zaznaczona.
}
//[...] Pobieranie opcji konfiguracyjnych serwletu.
}
@Override
public void destroy() {
try {
con.close();
} catch (SQLException e) {
System.err.println("Unexpected error at closing database connection.");
}
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException {
resp.setContentType("text/html; charset=UTF-8");
PrintWriter out = resp.getWriter();
if (resp.getStatus() == resp.SC_OK) {//200
//[...] Tutaj są pobierane i przetwarzane opcje ze strony www
} else {//Obsługiwane kody błędów HTTP
//[...]
}
out.close();
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException, NullPointerException {
try {
doPost(req, resp);
} catch (NullPointerException e) {//Gdybyśmy usunęli lub zmienili nazwę w pasku adresu...
resp.sendError(resp.SC_BAD_REQUEST, "Please, use /? for help.");
}
}
}