Lasciami dire che tutti gli errori che ti sono venuti fuori sono errori banali, quindi un cosiglio che ti do è di darti una ripassata alle basi del linguaggio.
Il primo errore è dato dal metodo
codice:
public Operatore getOperatore(String username)
	{
		Operatore res = new Operatore();
		String query = "SELECT * FROM operatore WHERE username = "+username;
		Vector<Object> v =db.executeSelect(query, "Operatore"); 
		res = (Operatore)v.get(0);
		return res;
	}
Ovviamente se l'username è sbagliato (e qui che dovresti cmq controllare anche la psw) il vettore che viene fuori dal executeSelect è vuoto, quindi quando cerchi di accedere alla prima posizione di tale vettore (v.get(0)) ti viene sollevata un ArrayIndexOfBound in quanto il vettore è vuoto.
Per il fatto che non ti funzioni il foward verso una data pagina in base al ruolo il problema sta qui:
codice:
String categoria = request.getParameter("ruolo");
if (o.getRuolo().equals(request.getParameter("ruolo"))){

if ( categoria.equals("Amministratore") )
Il primo if imponi che il ruolo dell'operatore che sta effettuando il login si uguale ad un "fantomatico" parametro del form "ruolo", ovviamente questa uguglianza non ci sarà mai in quanto il parametro non esiste nel form.
Stessa cosa vale per categoria.