Сесии в Servelt


1.Като използваме cookies.Cookie е низ (в такъв случай, се сията е ID) Което се изпраща до потребителя, за да стартира сесия. Ако потребителят иска да прекрати сесията, той изпраща обратно Cookie с отказване. Това е най-използвания начин, за използване на сесии.

2.Препрочитане на URLs.Всички връзки и пренасоки, които са създадени от Servlet, трябва да бъдатto кодирани, за включване на сесията ID. Това е по елегантно решение(и двете, за Servlet изпълнение и потребители) защото сесията, немоще да се поддържа, при искане на добре познатите URL или, да се избере URL която е изградена от друг тип сесия (или без) .

В този пример, ще използваме виртуална карта за покупки. Потребителите могат да добавят предмети в тяхната карта, чрез HTML форми .

Първата версия за Servlet, наричаме ShoppingCartServlet, която работи с Cookie-стил, само сесии, които са, от два стандартни методи doGet и doPost:

Формуляр с бутоните е създаден от метода doGet в Servlet’s.

 protected void doGet(
HttpServletRequest req, HttpServletResponse res)
             throws ServletException, IOException
   {
      res.setContentType("text/html");
     PrintWriter out = res.getWriter();
     out.print("<HTML><HEAD><TITLE>Онлайн магазин</TITLE>"+
                "</HEAD><BODY><FORM METHOD=POST>"+
               "<INPUT TYPE=SUBMIT NAME=foo VALUE="+
               "\"Поставя foo в картатаt\">"+
                "<INPUT TYPE=SUBMIT NAME=bar VALUE="+
               "\"Поставя BAR в картата\">"+
                "<INPUT TYPE=SUBMIT NAME=see VALUE="+
                "\"Вижте съдържанието на количката\">"+
              "<INPUT TYPE=SUBMIT NAME=buy VALUE="+
                "\"Купете съдържанието в количката\">"+
               "</FORM></BODY></HTML>");
      out.close();
    }

doPost методът изпълнява процеси, под формата на данни, които се изпращат от клиент в отговор на формата, създадена от doGet.
Продължение на кода:

    protected void doPost(
HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException
   {
     String msg;
 
      HttpSession session = req.getSession(true);
     if(session.isNew())
      {
        session.putValue("foo", new int[] { 0 });
       session.putValue("bar", new int[] { 0 });
      }
 
     int[] foo = (int[])session.getValue("foo");
     int[] bar = (int[])session.getValue("bar");
 
      if(req.getParameter("foo") != null)
      {
       foo[0]++;
        msg = "Вие купихте FOO сега имате "+foo[0]+".";
    }
    else if(req.getParameter("bar") != null)
      {
       bar[0]++;
        msg = "Вие купихте BAR. сега имате "+bar[0]+".";
     }
    else if(req.getParameter("buy") != null)
      {
     session.invalidate();
   msg = "Вие поръчахте "+foo[0]+" FOOs и "+bar[0]+
   " BAR-овете са изпратени. Вашата карта за покупки е празна.";
      }
      else
     {
       msg = "Вие имате "+foo[0]+" FOOs и "+bar[0]+
         " BAR-овете са в вашата карта.";
     }
 
      res.setContentType("text/html");
     res.setHeader("pragma", "no-cache");
     PrintWriter out = res.getWriter();
      out.print("<HTML><HEAD>
<TITLE>Карта за пазаруване</TITLE></HEAD><BODY>");
     out.print(msg);
      out.print("<HR><A HREF=\"");
      out.print(req.getRequestURI());
    out.print("\">Върни се в магазина</A>
</BODY>
</HTML>");
      out.close();
    }

Първо взимаме HttpSession обекта, който е свързан с извикване, след повикване req.getSession. Аргументът се опитва да създаде нова сесия, ако искането, несадържа валиден ключ.
Връщаме стойностите на „foo“ и „bar“ от сесията .
В ListManagerServlet, двата бутона имат едно и също име, но различни стойности, затова можем да използваме getParameter за да получим стойността, от поръчката и тогава, да изпълним низ който да сравни стойностите

Нов FOO или BAR може да бъде добавен в картата за покупки много лесно, като увеличите стойностите в масива.

Когато потребител реши да направи покупка, ние извикваме session.invalidate() за да изтрием сесията и казваме на сесията да бъде премахната от ID Cookie. Сесията е загубена, но при нова поръчка в Servlet тя се връща.
Ето целия код:

ShoppingCartServlet.java

 import java.io.*;
   import javax.servlet.*;
  import javax.servlet.http.*;
 
 public class ShoppingCartServlet extends HttpServlet
 {
   protected void doGet(
HttpServletRequest req, HttpServletResponse res)
             throws ServletException, IOException
   {
      res.setContentType("text/html");
     PrintWriter out = res.getWriter();
     out.print("<HTML><HEAD><TITLE>Онлайн магазин</TITLE>"+
                "</HEAD><BODY><FORM METHOD=POST>"+
               "<INPUT TYPE=SUBMIT NAME=foo VALUE="+
               "\"Поставя foo в картатаt\">"+
                "<INPUT TYPE=SUBMIT NAME=bar VALUE="+
               "\"Поставя BAR в картата\">"+
                "<INPUT TYPE=SUBMIT NAME=see VALUE="+
                "\"Вижте съдържанието на количката\">"+
              "<INPUT TYPE=SUBMIT NAME=buy VALUE="+
                "\"Купете съдържанието в количката\">"+
               "</FORM></BODY></HTML>");
      out.close();
    }
 
  protected void doPost(
HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException
   {
     String msg;
 
      HttpSession session = req.getSession(true);
     if(session.isNew())
      {
        session.putValue("foo", new int[] { 0 });
       session.putValue("bar", new int[] { 0 });
      }
 
     int[] foo = (int[])session.getValue("foo");
     int[] bar = (int[])session.getValue("bar");
 
      if(req.getParameter("foo") != null)
      {
       foo[0]++;
        msg = "Вие купихте FOO сега имате "+foo[0]+".";
    }
    else if(req.getParameter("bar") != null)
      {
       bar[0]++;
        msg = "Вие купихте BAR. сега имате "+bar[0]+".";
     }
    else if(req.getParameter("buy") != null)
      {
     session.invalidate();
   msg = "Вие поръчахте "+foo[0]+" FOOs и "+bar[0]+
   " BAR-овете са изпратени. Вашата карта за покупки е празна.";
      }
      else
     {
       msg = "Вие имате "+foo[0]+" FOOs и "+bar[0]+
         " BAR-овете са в вашата карта.";
     }
 
      res.setContentType("text/html");
     res.setHeader("pragma", "no-cache");
     PrintWriter out = res.getWriter();
      out.print("<HTML><HEAD>
<TITLE>Карта за пазаруване</TITLE></HEAD><BODY>");
     out.print(msg);
      out.print("<HR><A HREF=\"");
      out.print(req.getRequestURI());
    out.print("\">Върни се в магазина</A>
</BODY>
</HTML>");
      out.close();
    }
 
   public String getServletInfo()
    {
      return "Карта за покупки в Servlet";
    }
 }

Popularity: 1% [?]

No related posts.

Related posts brought to you by Yet Another Related Posts Plugin.

You can leave a response, or trackback from your own site.

Leave a Reply

Задвижван с помощта на WordPress | Compare Cell Phone Plans at iCellPhonePlans.com | Thanks to Cheap Palm Pixi, Bromoney and Wordpress Themes