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

    Servlet - aggiornare la Session per l'uso di URL rewriting

    Ciao,

    io non ho ben capito cosa devo fare per inserire l'url rewriting ad un applicazione e le sue servlet che lavorano tramite session...

    Ovviamente nel caso i cookie sono disattivati nel browser, session e cookie non funzioneranno nella mia applicazione.


    Ma allora... come automatizzo : 1. il riconoscimento abilitazione/disabilitazione dei cookies, 2. l'uso del URL rewriting... ??

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

    Re: Servlet - aggiornare la Session per l'uso di URL rewriting

    Originariamente inviato da cagnaluia
    io non ho ben capito cosa devo fare per inserire l'url rewriting ad un applicazione e le sue servlet che lavorano tramite session...
    Se i cookie sono abilitati il ID di sessione può essere memorizzato in un cookie che sta sul client e può quindi tornare indietro al server proprio perché il browser invia i cookie negli header della request.

    Se i cookie sono disabilitati (o comunque quelli del sito xyz non sono accettati), allora l'unico modo per tenere "viva" la sessione è far ritornare al server il ID di sessione attraverso gli url.

    Ma questo vuol dire che tutti i link della pagina li devi "generare" tu (quindi non può funzionare se passi es. attraverso una pagina html "statica") e li devi far codificare da encodeURL() di HttpServletResponse.

    In sostanza se generi ad esempio una pagina direttamente da una servlet, invece di fare:

    out.println("Altra pagina");

    dovrai fare:

    out.println("Altra pagina");

    E questo, come ripeto, per tutti i link che devi scrivere nella pagina.

    Per le pagine JSP esiste <c:url> di JSTL che fa appunto questo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    grazie, perfetto.


    questo vale per le servlet, poichè dietro c'è appunto la tecnologia in grado di gestire l'ID tramite response.encodeURL.

    quindi "sarei" fregato, se come prima pagina questa fosse un semplice HTML. (che può rispondere in GET o in POST).
    Per comodità quindi dovrei trasformarla in una servlet? E' l'unica strada?

  4. #4
    su una pagina HTML seleziono da quattro radiobutton una preferenza di linguaggi di programmazione quindi spedisco in POST alla Servlet tale selezione.
    Questa Servlet, tramite link in GET mi permetterà di tornare a selezionare un nuovo linguaggio oppure vedere ciò che ho finora selezionato.

    Ovviamente con i cookies attivi, nessun problema.

    Ovviamente come dici tu, con i cookie disattiviati e la modifica response.encodeURL, la Servlet funziona, MA la pagina HTML non può mantenere lo stato...

    Perciò in questi casi cosa si fa?

    Si elimina la pagina HTML e la si trasforma in una Servlet?
    Oppure?




    semplicemente, la struttura è questa:

    la pagina HTML [SessionSelectLanguage.html]

    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      </head>
      <body>
          <form action="/session_esempio_esterno/SessionServlet" method="post">
              
    
    Seleziona linguaggio programmazione</p>
              
    
    
                  <input type="radio" name="language" value="C">C
    
                  <input type="radio" name="language" value="C++">C++
    
                  <input type="radio" name="language" value="JAVA" checked="checked">JAVA
    
                  <input type="radio" name="language" value="VB6">VB6
    
              </p>
              
    
    <input type="submit" value="Submit"/></p>
          </form>
      </body>
    </html>

    e questa la Servlet [SessionServlet]

    codice:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package mypackage;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import java.util.*;
    import javax.servlet.http.*;
    /**
     *
     * @author fmartign
     */
    public class SessionServlet extends HttpServlet {
    
        private final Map books = new HashMap();
    
        public void init(){
            books.put("C","0123456789");
            books.put("C++","1234567890");
            books.put("JAVA","2345678901");
            books.put("VB6","3456789012");
    
        }
        /** 
         * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            try {
                /* TODO output your page here
                out.println("<html>");
                out.println("<head>");
                out.println("<title>Servlet SessionServlet</title>");  
                out.println("</head>");
                out.println("<body>");
                out.println("<h1>Servlet SessionServlet at " + request.getContextPath () + "</h1>");
                out.println("</body>");
                out.println("</html>");
                */
            } finally { 
                out.close();
            }
        } 
    
        // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
        /** 
         * Handles the HTTP <code>GET</code> method.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            //processRequest(request, response);
    
           HttpSession session = request.getSession(false);
    
           Enumeration valueNames;
    
           if(session!=null) valueNames = session.getAttributeNames();
           else valueNames=null;
    
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
    
           out.println("<?xml version=\"1.0\"?>");
           out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Strict//EN\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
    
           out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
    
           out.println("<head>");
           out.println("<title>I Selezionati</title>");
           out.println("</head>");
    
           out.println("<body>");
    
           if(valueNames!=null && valueNames.hasMoreElements()){
                out.println("<h1>Selezioni<h1>");
                out.println("
    
    ");
    
                String name,value;
    
                while(valueNames.hasMoreElements()){
                    name=valueNames.nextElement().toString();
                    value=session.getAttribute(name).toString();
    
                    out.println(name+" Programma. ISBN#: "+value+"
    ");
                }
    
                out.println("</p>");
           }else{
                out.println("<h1>NESSUNA Selezione<h1>");
                out.println("
    
    NESSUNA Selezione</p>");
    
           }
    
           out.println("</body>");
           out.println("</html>");
           out.close();
    
        } 
    
        /** 
         * Handles the HTTP <code>POST</code> method.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            //processRequest(request, response);
            String language=request.getParameter("language");
    
            HttpSession session = request.getSession(true);
    
            session.setAttribute(language,books.get(language));
    
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
    
            out.println("<?xml version=\"1.0\"?>");
            out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Strict//EN\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
    
            out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
    
            out.println("<head>");
            out.println("<title>Benvenuto - Sessioni</title>");
            out.println("</head>");
    
            out.println("<body>");
            out.println("
    
    Benvenuto - Sessioni! Tu hai selezionato: "+language+".</p>");
    
            out.println("
    
    Il tuo ID sessione è: "+session.getId()+"
    ");
            out.println("Questa "+(session.isNew()?"è":"non è")+" una nuova sessione 
    ");
            out.println("La sessione è stata creata: "+new Date(session.getCreationTime())+"
    ");
            out.println("Il tuo ultimo accesso alla sessione: "+new Date(session.getLastAccessedTime())+"
    ");
            out.println("Il tempo massimo di inattività è: "+session.getMaxInactiveInterval()+" secondi</p>");
    
    
            //out.println("
    
    <a href=/session_esempio_esterno/SessionSelectLanguage.html>Aggiungi un altro Linguaggio</a></p>");
            //out.println("
    
    <a href=/session_esempio_esterno/SessionServlet>Vedi i libri selezionati</a></p>");
            out.println("
    
    Vedi i libri selezionati</p>");
    
            out.println("</body>");
            out.println("</html>");
    
        }
    
        /** 
         * Returns a short description of the servlet.
         * @return a String containing servlet description
         */
        @Override
        public String getServletInfo() {
            return "Short description";
        }// </editor-fold>
    
    }

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da cagnaluia
    Perciò in questi casi cosa si fa?

    Si elimina la pagina HTML e la si trasforma in una Servlet?
    No, non proprio.
    Dovresti sfruttare di più il pattern MVC. Lascia che la/e servlet facciano solo da "controller", eseguano controlli/query/elaborazioni (tipicamente con l'aiuto di altre classi che fanno da "model"), quindi imposti eventuali dati da visualizzare in un qualche "scope" (tipicamente il request scope o in certi casi il session scope) e alla fine del lavoro della servlet fai un "forward" ad una pagina JSP, che si occuperà di generare la pagina prendendo i dati dallo scope scelto usando preferibilmente EL (expression language) e tag di JSTL o altre tag library.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    no, purtroppo non posso ancora utilizzare JSP e relativi TAG.

    si tratta di esercizi, e ho il permesso di utilizzare tutto quel che arriva "concettualmente" alle Servlet, session, cookies e filtri inclusi.
    Ma non a JSP e ad altre tecnologie.

    Tutt ciò alla fine per creare un sistema di login, con recupero informazioni sull attività passata e login stesso (se ci sono i cookies attivi) e un carrello prodotti.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da cagnaluia
    non posso ancora utilizzare JSP e relativi TAG.
    si tratta di esercizi
    Ahhh allora ok. Quindi non hai altra scelta che generare tutte le pagine con delle servlet.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Originariamente inviato da andbin
    Ahhh allora ok. Quindi non hai altra scelta che generare tutte le pagine con delle servlet.
    perfetto! mi adopererò in questa direzione.


    grazie

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.