![]()
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.
RSS Feed
Twitter

януари 6th, 2010
admin
Posted in 
