Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Chiamare un metodo di una servlet

    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

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Chiamare un metodo di una servlet

    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
    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??
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    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

  4. #4
    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.

  5. #5
    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

  6. #6
    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.

  7. #7
    aaa ok tutto chiaro ^^

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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...
    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.
    Poi bisogna vedere cosa devi fare di preciso, quali/quanti parametri specifici servono per un certo lavoro, ecc....

    Originariamente inviato da Selvaggio87
    ma tipo pagina?metodo=nomeMetodo non si può? o una cosa del genre
    Ma hai letto quanto ho detto io sopra?

    Questo potresti fare:

    .....

    codice:
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String operStr = req.getParameter("oper");
    
        if ("pippo".equals(operStr)) {
            // .......
        } else ....
           .......
    }
    Ripeto: la request porta con sé dei parametri. Nella servlet puoi recuperare questi parametri, testarli come ti pare e fare quello che ti pare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.