Store Door Image.

Пишемо інтернет-магазин на сервлетах

Якщо ви тільки починаєте працювати з Java, то цей туторіал може бути корисним. Пропоную написати міні(!) інтернет-магазин і далі його розвивати додаючи функціонал і технології. Перед стартом переконайтеся, що у вас є JDK, в командному рядку javac -v. Плюс білд менеджер maven, mvn -v.

Створюємо проект

Нам необхідно створити наступну структуру директорій.

.
├── pom.xml 
└── src
   └── main
       └── java
           └── ua  
               └── com 
                   └── java4beginners
                       ├── CartServlet.java
                       ├── Product.java
                       └── ProductListServlet.java
        
            

Це можна зробити вручну або скориставшись командою mvn archetype:generate.

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>


  <groupId>ua.com.java4beginners</groupId>
  <artifactId>servlets-forms-store</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

  <name>servlets-forms-store</name>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.4.6.v20170531</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <httpConnector>
            <port>8080</port>
          </httpConnector>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Product.java

package ua.com.java4beginners;

public class Product {
    private Long id;
    private String title;
    private String description;
    private Integer price;

    public Product(Long id, String title, String description, Integer price) {
        this.id = id;
        this.title = title;
        this.description = description;
        this.price = price;
    }

    public Long getId() {
        return id;
    }

    public String getTitle() {
        return title;
    }

    public String getDescription() {
        return description;
    }

    public Integer getPrice() {
        return price;
    }
}

CartServlet.java

package ua.com.java4beginners;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet(loadOnStartup = 1, urlPatterns = "/cart/products")
public class CartServlet extends HttpServlet {
    // Neber do like this in real projects. Servlet should be stateless.
    static List cart = new ArrayList<>();
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Long productId = Long.valueOf(req.getParameter("id"));
        cart.add(productId);
        resp.sendRedirect("/");
    }
}

ProductListServlet.java

package ua.com.java4beginners;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

@WebServlet(loadOnStartup = 1, urlPatterns = "/")
public class ProductListServlet extends HttpServlet {
  // Neber do like this in real projects. Servlet should be stateless.
  static Map<Long, Product> products = new HashMap<Long, Product>(){{
      put(1L, new Product(1L, "NoteBook", "Just a notebook.", 100));
      put(2L, new Product(2L, "Cup", "Just a cup.", 125));
  }};

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     PrintWriter out = resp.getWriter();
     out.write("<html><body><h1>Products</h1><ul>");

     // Print all products
     for (Product product : products.values()) {
         out.printf("<li>%s, %d", product.getTitle(), product.getPrice());
         String addToCartButtonHtml = "<form method='POST' action='/cart/products' style='display:inline-block'>" +
                 "<input type='hidden' name='id' value='%d'>" +
                 "<input type='submit' value='Add'>" +
                 "</form></li>";
         out.printf(addToCartButtonHtml, product.getId());
     }

     out.write("<h3>Cart</h3>");

     // Print products in the cart
     for (Long productId : CartServlet.cart) {
         Product product = products.get(productId);
         out.printf("<pre>%15s %d $</pre>", product.getTitle(), product.getPrice());
     }
     out.write("</ul></body></html>");
 }
}
Запускаємо mvn clean package jetty:run Відкриваємо в браузері http://127.0.0.1:8080

Що далі?

  • Додати сторінку товару з детальним описом. Сторінку замовлення.
  • Додати авторизацію через Кукі.
  • Додати базу даних. Розробити схему, таблиці. Додати підтримку JDBC в проект.
  • Додати сторінку адміністратора. Продумати ролі.
  • Попрацювати над інтерфейсом, додати Bootstrap.css.