Cet article présente principalement l'introduction de la session de servlet. L'éditeur pense que c'est plutôt bien, je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil.
La session est une technologie côté serveur. Grâce à cette technologie, le serveur peut créer un objet de session exclusif pour le navigateur de chaque utilisateur au moment de l'exécution. un navigateur occupe une session . Étant donné que la session est exclusive au navigateur de l'utilisateur, lorsque les utilisateurs accèdent aux ressources Web du serveur, ils peuvent stocker leurs propres données dans leurs propres sessions. Lorsque l'utilisateur accède à nouveau au serveur, lors de l'accès à un autre site Web. ressources, d'autres ressources Web récupèrent ensuite les données de la session respective de l'utilisateur pour servir l'utilisateur.
La principale différence entre Session et Cookie :
La technologie des cookies est une technologie côté client, dans laquelle le serveur réécrit les données de l'utilisateur à l'utilisateur pour la navigation sur l'appareil.
La technologie de session est une technologie côté serveur, qui écrit les données utilisateur dans un objet Session exclusif créé par le serveur pour l'utilisateur, mais la session est basée sur Cookie.
Les objets de session sont créés par le serveur, ce qui est différent des cookies. Les programmeurs peuvent obtenir l'objet Session via la méthode getSession() de l'objet requête.
Notez qu'une fois la session créée, elle ne survivra à aucune opération (ou le navigateur est fermé) pendant 30 minutes, ce qui est spécifié par le serveur (comme Tomcat). Lorsque nous fermons le navigateur, comme la Session est basée sur des cookies, la Session existe toujours, mais nous ne pourrons peut-être plus l'utiliser (cela dépend si le cookie peut encore être récupéré).
Ensuite, nous utilisons un exemple de session simple pour illustrer et créer deux servlets : nommés respectivement ServletDemo1 et ServletDemo2.
Le code dans ServletDemo1 est le suivant :
HttpSession session = request.getSession(); String data = "message form SessionDemo"; session.setAttribute("data", data);
Le code dans ServletDemo2 est le suivant :
response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); HttpSession session = request.getSession(); String data = (String) session.getAttribute("data"); writer.write(data);
Lorsque nous ouvrons un navigateur et visitons d'abord ServletDemo1, le navigateur nous aidera à créer un objet Session et à enregistrer les données. Lorsque nous visiterons à nouveau ServletDemo2, nous pourrons voir les données enregistrées. :
Cela montre que Session peut effectivement sauvegarder des données lors de l'accès à différents Servlets.
Laissez-moi être clair ici. Bien que les codes soient les mêmes, lorsque vous y accédez par différents navigateurs, vous verrez différentes données enregistrées par différents objets de session, bien que les données soient toutes différentes. le temps, c'est pareil. Par exemple, si A accède à ce servlet sur son propre hôte et que B accède au même servlet sur son propre ordinateur, A et B auront leurs propres sessions.
Et si nous ouvrons un navigateur pour accéder à ServletDemo1 puis ouvrons un autre navigateur pour accéder à ServletDemo2, cela montrera que les données sont introuvables :
Remarque : Il existe actuellement deux navigateurs, c'est-à-dire qu'il y a déjà deux sessions ! ! !
Faisons un cas similaire à celui de cliquer sur un produit et de l'ajouter au panier, en utilisant la technologie Session.
Préparation préliminaire, nous devons créer un JavaBean pour le produit, le code est le suivant :
public class Product { private String id; private String name; private String author; public Product() { super(); } public Product(String id, String name, String author) { super(); this.id = id; this.name = name; this.author = author; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; }
Ensuite créer une base de données sous la forme d'une classe À créer (qui n'a pas encore appris les bases de données T_T !), puis à utiliser les collections Map pour stocker des données afin de les récupérer facilement via des paires clé-valeur :
public class ProductDatabase { private static Map<String,Product> map = new HashMap<String,Product>(); static{ map.put("1", new Product("1","《Java编程思想》","JB")); map.put("2", new Product("2","《Java核心技术》","fdaf")); map.put("3", new Product("3","《Java并发编程》","什么鬼")); map.put("4", new Product("4","《Head first 设计模式》","老王")); map.put("5", new Product("5","《HTML5权威手册》","hhaa")); } public static Map<String,Product> getMap() { return map; } }
D'accord, nous affichons les produits sur la page d'accueil de l'affichage du produit et créons un lien hypertexte pour chaque produit, de sorte que lorsque l'utilisateur clique sur le lien hypertexte, l'ID du produit puisse être utilisé comme base pour stocker les données. , et d'autres classes de Servlet peuvent obtenir le type de produit acheté par l'utilisateur :
response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); //获取数据库中的商品数据 Map<String, Product> map = ProductDatabase.getMap(); for(Map.Entry<String, Product> entry : map.entrySet()) { Product book = entry.getValue(); writer.print(book.getName()+" <a href='/myservlet/servlet/BuySession?id="+book.getId()+"' >购买</a> <br/>"); }
Vous pouvez jeter un œil à l'effet à ce stade :
Ensuite, créons l'hyperlien cliquer pour acheter. Ce dernier Servlet doit obtenir les biens achetés par l'utilisateur (via le numéro d'identification), et en même temps doit obtenez (créez) l'objet Session et utilisez une collection pour stocker les produits achetés. Cet objet Session stocke les produits que l'utilisateur souhaite acheter, lorsque nous accédons à la page du panier, nous pouvons retirer le produit de la session et. affichez-le :
//获取用户所购买商品的id号 String productId = request.getParameter("id"); Product book = ProductDatabase.getMap().get(productId); //将用户所购买的商品加入到Session对象中保存,以便最后一起结账,类似于购物车功能 HttpSession session = request.getSession(); List<Product> list = (List<Product>) session.getAttribute("productList"); if(list == null){ //首次购买 list = new ArrayList<Product>(); session.setAttribute("productList", list); } list.add(book); //跳转到购物车列表上 response.sendRedirect("/myservlet/servlet/CartListServlet");
Remarque : La redirection sendRedirect est utilisée ici. Si vous utilisez Il s'agit d'un transfert. Si vous actualisez la page du panier, chaque article acheté sera envoyé. être racheté.
La fonction dans le Servlet de la page panier peut être relativement simple. Sortir l'objet d'achat enregistré de la Session de l'utilisateur et l'afficher sur la page :
response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); writer.print("您购买的商品如下: <br/>"); HttpSession session = request.getSession(); List<Product> list = (List<Product>) session.getAttribute("productList"); for(Product p : list) { writer.write(p.getName()+"<br/>"); }
Cliquez sur plusieurs produits et vous verrez les produits que nous avons achetés affichés sur la page Servlet du panier :
Lorsque vous cliquez sur ces produits dans plusieurs navigateurs ouverts, vous verrez différentes pages de panier d'achat, vous pouvez donc utiliser Session pour répondre aux besoins des différents utilisateurs d'accéder à la même page tout en enregistrant leurs différentes données.
Bien sûr, il s'agit simplement d'insister sur le fait que l'objet de session peut enregistrer les données générées par un navigateur accédant à plusieurs servlets au cours d'une session. L'exemple simple ci-dessus ne peut pas être utilisé pour faire du shopping, par exemple. lorsque nous fermons le navigateur (la session se termine), l'objet de session se termine, puis notre panier n'aura rien lorsque nous ouvrirons le navigateur la prochaine fois. Si nous voulons répondre aux différents besoins des utilisateurs, nous devons comprendre certains objets de session. . La structure sous-jacente de
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!