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>

}