Ciao ragazzi, scusate per la domanda stupida. Se volessi chiamare un metodo in una servlet come dovrei fare?
<a hrfe="nomeServlet?method=nomeMetodo">
perchè facendo così mi chiama sempre il metodo principale della servlet:
processRequest
Ciao ragazzi, scusate per la domanda stupida. Se volessi chiamare un metodo in una servlet come dovrei fare?
<a hrfe="nomeServlet?method=nomeMetodo">
perchè facendo così mi chiama sempre il metodo principale della servlet:
processRequest
Innanzitutto la questione a livello concettuale: perché dovresti voler fare una cosa del genere?? Vuoi che una servlet possa fare più tipi di operazioni o comunque differenziare cosa fa a seconda di uno o più parametri nella request??Originariamente inviato da Selvaggio87
Ciao ragazzi, scusate per la domanda stupida. Se volessi chiamare un metodo in una servlet come dovrei fare?
<a hrfe="nomeServlet?method=nomeMetodo">
perchè facendo così mi chiama sempre il metodo principale della servlet:
processRequest
Perfetto ... ma non centrerebbero nulla i metodi, perlomeno non nel modo che stavi pensando tu.
La servlet la farai estendendo HttpServlet (perché ovviamente sul web si parla di protocollo HTTP) e tipicamente si fa l'override di doGet() e/o doPost() a seconda di cosa deve gestire come tipo di request, tipicamente appunto o un GET e/o POST.
In questi metodi farai quello vuoi e ovviamente puoi accedere ai parametri forniti nella request, quindi fare cose del tipo "se il valore di un parametro X è Y fai Z" o qualunque altra cosa ti pare.
L'obiettivo non è e non dovrebbe essere quello di indicare come parametro un nome di metodo pensando di invocare quello.
Le servlet hanno un ciclo di vita ben definito, dove il metodo principale di "servizio" che è "noto" al container è solo uno: void service(ServletRequest, ServletResponse).
Se poi è un HttpServlet (lo è quasi sicuramente per lo sviluppo di servlet in ambito web), quel service invoca l'altro service(HttpServletRequest, HttpServletResponse) il quale "fattorizza" la gestione in base al metodo HTTP, cioè invoca doGet() per un GET, doPost() per un POST, ecc....
Punto, questo è il "servizio" di una servlet.
Se tu tecnicamente volessi ricevere un parametro e nel doXXX() far invocare quel metodo, beh si potrebbe fare. Ma devi farlo tu. O andando a fare una classica catena di test (es. "se il parametro chiamato "method" contiene xyz allora invoca xyz(), se .....") oppure dinamicamente sfruttando la reflection.
Ma non sarebbe comunque l'approccio migliore.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
No aspetta...
Io volevo creare più metodi in una servlet per farlo più ordinati... Mi spiego. Supponi che voglia fare una chat (è un esempio). Creo una servlet Chat e al suo intero vorrei creare due metodi, scriviChat, leggiChat. Adesso da un links non posso chiamare questi due metodi? Per esempio quando usavo struts all'interno di un Action mi creavo quanti metodi volevo e poi richiamavo questi metodi semplicemente con:
/gestione.do?method=nomeMetodo
Nella servlet tu implementi il doGet e/o il doPost obbligatoriamente, io farei richiamare a questi due metodi i metodi privati scriviChat, leggiChat eventualmente sulla base di qualche parametro.
Questo è il concetto base poi ci sono mille maniere per raffinarlo.
Mazza così se in una servlet avrei per esempio 10 metodi, dovrei cmq passarmi dei parametri per fare dei controlli per poter chiamare i metodi...ma tipo pagina?metodo=nomeMetodo non si può? o una cosa del genre
tu al server puoi inviare solo richieste get/post e lui solo a quelle sa rispondere. Quando tu mandi la richiesta lui vede di che tipo è, esempio GET, vede qual'è la servlet incaricata di gestirla, la istanzia invoca il metodo doGet passandogli i parametri che gli sono arrivati.
Ovviamente doGet nel soddisfare la richiesta si avvale di composizione e delega, meccanismi su cui la programmazione orientata agli oggetti si basa. Spero di non aver detto scemenze.
aaa ok tutto chiaro ^^
Ma non dovresti vederla così: ho N operazioni, faccio 1 servlet unica e voglio invocare N metodi. E chi l'ha detto? Intanto se ci sono compiti ben diversi e specializzati, sarebbe più opportuno avere differenti servlet.Originariamente inviato da Selvaggio87
Mazza così se in una servlet avrei per esempio 10 metodi, dovrei cmq passarmi dei parametri per fare dei controlli per poter chiamare i metodi...
Poi bisogna vedere cosa devi fare di preciso, quali/quanti parametri specifici servono per un certo lavoro, ecc....
Ma hai letto quanto ho detto io sopra?Originariamente inviato da Selvaggio87
ma tipo pagina?metodo=nomeMetodo non si può? o una cosa del genre
Questo potresti fare:
.....
Ripeto: la request porta con sé dei parametri. Nella servlet puoi recuperare questi parametri, testarli come ti pare e fare quello che ti pare.codice:protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String operStr = req.getParameter("oper"); if ("pippo".equals(operStr)) { // ....... } else .... ....... }
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet