>Java >java지도 시간 >Java 서블릿 세션의 그래픽 코드 소개

Java 서블릿 세션의 그래픽 코드 소개

黄舟
黄舟원래의
2017-07-27 15:18:371338검색

이 글은 주로 서블릿 세션의 소개를 소개하는데, 편집자가 보기에는 꽤 좋다고 생각해서 지금 공유하고 참고하겠습니다. 편집기를 따라가서 살펴보겠습니다.

Session은 이 기술을 사용하여 서버가 런타임 시 각 사용자의 브라우저에 대한 독점 세션 개체를 생성할 수 있습니다. 세션은 사용자 브라우저에만 적용되므로 사용자가 서버의 웹 리소스에 액세스하면 사용자가 서버의 다른 웹 리소스에 액세스할 때 자신의 데이터를 자신의 세션에 저장할 수 있습니다. 사용자에게 서비스를 제공하기 위해 사용자의 각 세션에서 데이터를 가져옵니다.

세션과 쿠키의 주요 차이점:

쿠키 기술은 서버가 사용자의 데이터를 사용자의 브라우저에 다시 쓰는 클라이언트 측 기술입니다.


Session 기술은 사용자를 위해 서버가 생성한 전용 Session 개체에 사용자 데이터를 기록하는 서버 측 기술이지만 Session은 쿠키를 기반으로 합니다.


세션 개체는 서버에 의해 생성되며 이는 쿠키와 다릅니다. 프로그래머는 요청 객체의 getSession() 메소드를 통해 Session 객체를 얻을 수 있습니다.

세션이 생성되면 서버(예: Tomcat)에서 지정한 30분 동안 어떤 작업도 수행하지 않거나 브라우저를 닫은 상태로 유지됩니다. 브라우저를 닫으면 세션이 쿠키를 기반으로 하기 때문에 세션은 여전히 ​​존재하지만 더 이상 사용할 수 없습니다(쿠키를 계속 검색할 수 있는지 여부에 따라 다름).


그런 다음 간단한 세션 예제를 사용하여 각각 ServletDemo1 및 ServletDemo2라는 두 개의 서블릿을 설명하고 생성해 보겠습니다.


ServletDemo1의 코드는 다음과 같습니다.



 HttpSession session = request.getSession();
 String data = "message form SessionDemo";
 session.setAttribute("data", data);

ServletDemo2의 코드는 다음과 같습니다.


 response.setContentType("text/html;charset=utf-8");
 PrintWriter writer = response.getWriter();
     
 HttpSession session = request.getSession();
 String data = (String) session.getAttribute("data");
 writer.write(data);

브라우저를 열고 먼저 ServletDemo1을 방문하면 브라우저가 세션을 생성하는 데 도움을 줍니다. 그런 다음 ServletDemo2를 방문하면 저장된 데이터를 볼 수 있습니다.


이는 세션이 실제로 다른 서블릿에 액세스할 때 데이터를 저장할 수 있음을 의미합니다.


분명히 말씀드리자면 코드는 동일하지만 다른 브라우저에서 액세스하면 현재 데이터는 동일하지만 다른 세션 개체에 의해 저장된 다른 데이터가 표시됩니다. 예를 들어, A가 자신의 호스트에서 이 서블릿에 액세스하고 B가 자신의 컴퓨터에서 동일한 서블릿에 액세스하는 경우 A와 B는 각자의 세션을 갖게 됩니다.

브라우저를 열어 ServletDemo1에 액세스한 다음 다른 브라우저를 열어 ServletDemo2에 액세스하면 데이터를 찾을 수 없다는 메시지가 표시됩니다.


참고: 현재 두 개의 브라우저가 있습니다. 벌써 2회차가 지났네요! ! !


세션 기술을 사용하여 제품을 클릭하고 장바구니에 추가하는 것과 유사한 사례를 만들어 보겠습니다.


전제 조건 준비, 제품에 대한 JavaBean을 생성해야 합니다. 코드는 다음과 같습니다.


 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;
   }

그런 다음 데이터베이스를 생성하고 클래스 방식으로 생성합니다(아직 데이터베이스를 배우지 않은 사람이 있습니까? T_T !), 그런 다음 지도 컬렉션을 사용합니다. 키-값 쌍을 통해 쉽게 검색할 수 있도록 데이터를 저장하려면:


 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;
   }
 }

자, 제품 디스플레이의 홈 페이지에 제품을 표시하고 각 제품에 대한 하이퍼링크를 생성합니다. 사용자가 하이퍼링크를 클릭하면 해당 상품이 데이터 저장을 위한 기반으로 사용되며, 다른 서블릿 클래스는 사용자가 구매한 상품 유형을 가져오는 데 사용됩니다.


   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=&#39;/myservlet/servlet/BuySession?id="+book.getId()+"&#39; >购买</a> <br/>");
     }

이때, 효과를 볼 수 있습니다:


그런 다음 구매 하이퍼링크를 클릭한 후 서블릿을 만듭니다. 서블릿은 사용자가 구매한 상품(ID 번호를 통해)을 가져와야 하며( 생성) Session 객체를 생성하고 컬렉션을 사용하여 구매한 상품을 저장합니다. 이 Session 객체는 사용자가 구매하려는 상품을 저장합니다. 점프할 때 장바구니 페이지로 이동하면 Session에서 제품을 꺼낼 수 있습니다. 표시:


     //获取用户所购买商品的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");

참고: 여기에서는 SendRedirect 리디렉션이 사용됩니다. 전달을 사용하면 각 항목이 장바구니 페이지에서 새로 고쳐집니다.


장바구니 페이지의 서블릿 기능은 비교적 간단할 수 있습니다. 사용자 세션에서 저장된 구매 제품 개체를 꺼내서 페이지에 표시합니다.


     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/>");
     }

여러 제품을 클릭하면 표시됩니다. 우리가 구매한 품목은 장바구니의 서블릿 페이지에 표시됩니다:


여러 브라우저가 열려 있는 상태에서 이러한 제품을 클릭하면 구매할 수 있는 다양한 장바구니 페이지가 표시되므로 세션을 사용하면 서로 다른 데이터를 저장하면서 동일한 페이지에 액세스하려는 다양한 사용자의 요구를 해결할 수 있습니다.

물론 이는 세션 개체가 세션 중에 여러 서블릿에 액세스하는 브라우저에서 생성된 데이터를 저장할 수 있다는 단순한 강조일 뿐입니다. 위의 간단한 예는 탐색할 때와 같은 쇼핑에는 사용할 수 없습니다. 닫히면(세션이 종료됨) 세션 개체가 종료됩니다. 그러면 다음에 브라우저를 열면 장바구니에 아무것도 남지 않게 됩니다. 사용자의 다양한 요구 사항을 충족하려면 세션의 기본 구조를 이해해야 합니다. 개체

위 내용은 Java 서블릿 세션의 그래픽 코드 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.