PDA

View Full Version : [JAVA] Chiarimento su Servlet


Giobbo
15-04-2015, 14:52
Ciao a tutti.
Come da titolo, avrei bisogno di un chiarimento sull'utilizzo delle servlet.
Vi espongo il problema.
In pratica ho la mia pagina html in cui sono presenti due form differenti.
Il submit di tali form "attiva" delle chiamate Ajax:


function on_login() {
$.ajax({
url: '/login',
method: 'post',
success: on_login_success,
error: on_login_error,
data: {
nickname: $("#nickname_login").val(),
password: $("#password_login").val(),
},
});
return false;
}

function on_register() {
$.ajax({
url: '/register',
method: 'post',
success: on_register_success,
error: on_register_error,
data: {
nickname: $("#nickname_reg").val(),
password: $("#password_reg").val(),
re_password: $("#re_password_reg").val(),
mail: $("#mail_reg").value(),
},
});
return false;
}

Ora, io vorrei che entrambe le chiamate (in verità, tutte le chiamate che andrò a fare da questa pagina) siano indirizzate verso una Servlet.
Questa Servlet come la dovrei mappare nel file web.xml?
Una cosa del tipo:

<servlet>
<servlet-name>IndexServlet</servlet-name>
<servlet-class>IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

andrebbe bene?
Chiaramente in seguito all'interno della Servlet vorrei andare a vedere se ho inviato /login piuttosto che /register per avviare poi il metodo opportuno.
Come posso fare tutto ciò?

Ringrazio in anticipo chiunque abbia voglia di perdere qualche minuto per aiutarmi.

Daniels118
16-04-2015, 11:12
Il server richiama solo determinati metodi della servlet, puoi trovare l'elenco completo in rete, ne cito i più comuni: service, goGet e doPost.
Volendo puoi mappare ogni url ad una servlet distinta, oppure più url sulla stessa servlet aggiungendo altri oggetti servlet-mapping nel web.xml, che è ciò che vorresti fare.
Se utilizzi la seconda strada che ti sconsiglio vivamente, in uno dei metodi suddetti puoi usare HttpServletRequest.getServletPath() per capire con quale url è arrivata la richiesta è chiamare on_login o on_register.
Te lo sconsiglio perché facendo in questo modo vai a cablare gli url nella servlet rendendo inutile e oscuro il servlet-mapping.

Questa tecnica può essere comunque adeguata spostando in un file esterno la mappatura url->metodo, che è ciò che fanno alcuni framework come struts.
In pratica si mappano tutti gli url (utilizzando una wildcard) su una servlet predefinita che legge un file di configurazione (es. struts-config.xml) nel quale ogni url è mappato su un metodo (scelto da te) di una classe (scelta da te).