diff --git a/README.md b/README.md
index 215be7b..026b23e 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,30 @@
-# javaee
\ No newline at end of file
+# Java EE Management System Skeleton
+
+This project provides a simple JSP/Servlet based management system.
+
+## Features
+
+- User registration with role selection (admin or user)
+- Login and session handling
+- Admin-only item management (add/delete)
+- Item listing for all users
+- Bootstrap-based interface
+
+## Project Structure
+
+```
+src/ Java source files
+WebContent/jsp/ JSP pages
+WebContent/WEB-INF/ web.xml configuration
+schema.sql MySQL schema
+```
+
+## Database Setup
+
+Import `schema.sql` into your MySQL server and adjust the credentials in
+`src/com/example/util/DBUtil.java`.
+
+## Build
+
+Use a servlet container such as Tomcat. Place the contents of this repository
+as a web application and compile the Java sources.
diff --git a/WebContent/WEB-INF/web.xml b/WebContent/WEB-INF/web.xml
new file mode 100644
index 0000000..13f8b10
--- /dev/null
+++ b/WebContent/WEB-INF/web.xml
@@ -0,0 +1,9 @@
+
+
+
+ jsp/index.jsp
+
+
diff --git a/WebContent/jsp/index.jsp b/WebContent/jsp/index.jsp
new file mode 100644
index 0000000..5159e66
--- /dev/null
+++ b/WebContent/jsp/index.jsp
@@ -0,0 +1,4 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%
+response.sendRedirect("login.jsp");
+%>
diff --git a/WebContent/jsp/items.jsp b/WebContent/jsp/items.jsp
new file mode 100644
index 0000000..8c4cab1
--- /dev/null
+++ b/WebContent/jsp/items.jsp
@@ -0,0 +1,77 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ page import="com.example.model.User" %>
+<%@ page import="java.util.List" %>
+<%@ page import="com.example.model.Item" %>
+
+
+ Items
+
+
+
+<%
+User user = (User) session.getAttribute("user");
+if(user == null){
+ response.sendRedirect("login.jsp");
+ return;
+}
+%>
+
+Items
+<%
+List- list = (List
- ) request.getAttribute("list");
+if(list == null){
+ list = new java.util.ArrayList<>();
+}
+String role = user.getRole();
+%>
+<% if("admin".equals(role)){ %>
+
+<% } %>
+
+
+ | ID | Name | Quantity | <% if("admin".equals(role)){ %>Actions | <% } %>
+
+
+ <% for(Item item: list){ %>
+
+ | <%= item.getId() %> |
+ <%= item.getName() %> |
+ <%= item.getQuantity() %> |
+ <% if("admin".equals(role)){ %>
+
+
+ |
+ <% } %>
+
+ <% } %>
+
+
+
+
diff --git a/WebContent/jsp/login.jsp b/WebContent/jsp/login.jsp
new file mode 100644
index 0000000..82cf7ac
--- /dev/null
+++ b/WebContent/jsp/login.jsp
@@ -0,0 +1,25 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+
+
+ Login
+
+
+
+Login
+<% String error = request.getParameter("error"); if("1".equals(error)){ %>
+Invalid username or password
+<% } %>
+
+
+
diff --git a/WebContent/jsp/logout.jsp b/WebContent/jsp/logout.jsp
new file mode 100644
index 0000000..babc7a4
--- /dev/null
+++ b/WebContent/jsp/logout.jsp
@@ -0,0 +1,5 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%
+session.invalidate();
+response.sendRedirect("login.jsp");
+%>
diff --git a/WebContent/jsp/register.jsp b/WebContent/jsp/register.jsp
new file mode 100644
index 0000000..af89337
--- /dev/null
+++ b/WebContent/jsp/register.jsp
@@ -0,0 +1,29 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+
+
+ Register
+
+
+
+Register
+
+
+
diff --git a/schema.sql b/schema.sql
new file mode 100644
index 0000000..69cb606
--- /dev/null
+++ b/schema.sql
@@ -0,0 +1,15 @@
+CREATE DATABASE IF NOT EXISTS management;
+USE management;
+
+CREATE TABLE IF NOT EXISTS users (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ username VARCHAR(50) UNIQUE NOT NULL,
+ password VARCHAR(100) NOT NULL,
+ role VARCHAR(10) NOT NULL
+);
+
+CREATE TABLE IF NOT EXISTS items (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ name VARCHAR(100) NOT NULL,
+ quantity INT NOT NULL
+);
diff --git a/src/com/example/dao/ItemDAO.java b/src/com/example/dao/ItemDAO.java
new file mode 100644
index 0000000..cbe97b2
--- /dev/null
+++ b/src/com/example/dao/ItemDAO.java
@@ -0,0 +1,80 @@
+package com.example.dao;
+
+import com.example.model.Item;
+import com.example.util.DBUtil;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ItemDAO {
+ public void insert(Item item) throws SQLException {
+ String sql = "INSERT INTO items(name,quantity) VALUES(?,?)";
+ try (Connection conn = DBUtil.getConnection();
+ PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
+ ps.setString(1, item.getName());
+ ps.setInt(2, item.getQuantity());
+ ps.executeUpdate();
+ try (ResultSet rs = ps.getGeneratedKeys()) {
+ if (rs.next()) {
+ item.setId(rs.getInt(1));
+ }
+ }
+ }
+ }
+
+ public void update(Item item) throws SQLException {
+ String sql = "UPDATE items SET name=?,quantity=? WHERE id=?";
+ try (Connection conn = DBUtil.getConnection();
+ PreparedStatement ps = conn.prepareStatement(sql)) {
+ ps.setString(1, item.getName());
+ ps.setInt(2, item.getQuantity());
+ ps.setInt(3, item.getId());
+ ps.executeUpdate();
+ }
+ }
+
+ public void delete(int id) throws SQLException {
+ String sql = "DELETE FROM items WHERE id=?";
+ try (Connection conn = DBUtil.getConnection();
+ PreparedStatement ps = conn.prepareStatement(sql)) {
+ ps.setInt(1, id);
+ ps.executeUpdate();
+ }
+ }
+
+ public Item findById(int id) throws SQLException {
+ String sql = "SELECT * FROM items WHERE id=?";
+ try (Connection conn = DBUtil.getConnection();
+ PreparedStatement ps = conn.prepareStatement(sql)) {
+ ps.setInt(1, id);
+ try (ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ Item item = new Item();
+ item.setId(rs.getInt("id"));
+ item.setName(rs.getString("name"));
+ item.setQuantity(rs.getInt("quantity"));
+ return item;
+ }
+ }
+ }
+ return null;
+ }
+
+ public List- listAll() throws SQLException {
+ List
- list = new ArrayList<>();
+ String sql = "SELECT * FROM items";
+ try (Connection conn = DBUtil.getConnection();
+ PreparedStatement ps = conn.prepareStatement(sql);
+ ResultSet rs = ps.executeQuery()) {
+ while (rs.next()) {
+ Item item = new Item();
+ item.setId(rs.getInt("id"));
+ item.setName(rs.getString("name"));
+ item.setQuantity(rs.getInt("quantity"));
+ list.add(item);
+ }
+ }
+ return list;
+ }
+}
diff --git a/src/com/example/dao/UserDAO.java b/src/com/example/dao/UserDAO.java
new file mode 100644
index 0000000..ebb6c97
--- /dev/null
+++ b/src/com/example/dao/UserDAO.java
@@ -0,0 +1,62 @@
+package com.example.dao;
+
+import com.example.model.User;
+import com.example.util.DBUtil;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class UserDAO {
+ public void insert(User user) throws SQLException {
+ String sql = "INSERT INTO users(username,password,role) VALUES(?,?,?)";
+ try (Connection conn = DBUtil.getConnection();
+ PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
+ ps.setString(1, user.getUsername());
+ ps.setString(2, user.getPassword());
+ ps.setString(3, user.getRole());
+ ps.executeUpdate();
+ try (ResultSet rs = ps.getGeneratedKeys()) {
+ if (rs.next()) {
+ user.setId(rs.getInt(1));
+ }
+ }
+ }
+ }
+
+ public User findByUsername(String username) throws SQLException {
+ String sql = "SELECT * FROM users WHERE username=?";
+ try (Connection conn = DBUtil.getConnection();
+ PreparedStatement ps = conn.prepareStatement(sql)) {
+ ps.setString(1, username);
+ try (ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ User user = new User();
+ user.setId(rs.getInt("id"));
+ user.setUsername(rs.getString("username"));
+ user.setPassword(rs.getString("password"));
+ user.setRole(rs.getString("role"));
+ return user;
+ }
+ }
+ }
+ return null;
+ }
+
+ public List listAll() throws SQLException {
+ List list = new ArrayList<>();
+ String sql = "SELECT * FROM users";
+ try (Connection conn = DBUtil.getConnection();
+ PreparedStatement ps = conn.prepareStatement(sql);
+ ResultSet rs = ps.executeQuery()) {
+ while (rs.next()) {
+ User user = new User();
+ user.setId(rs.getInt("id"));
+ user.setUsername(rs.getString("username"));
+ user.setRole(rs.getString("role"));
+ list.add(user);
+ }
+ }
+ return list;
+ }
+}
diff --git a/src/com/example/model/Item.java b/src/com/example/model/Item.java
new file mode 100644
index 0000000..855ff89
--- /dev/null
+++ b/src/com/example/model/Item.java
@@ -0,0 +1,16 @@
+package com.example.model;
+
+public class Item {
+ private int id;
+ private String name;
+ private int quantity;
+
+ public int getId() { return id; }
+ public void setId(int id) { this.id = id; }
+
+ public String getName() { return name; }
+ public void setName(String name) { this.name = name; }
+
+ public int getQuantity() { return quantity; }
+ public void setQuantity(int quantity) { this.quantity = quantity; }
+}
diff --git a/src/com/example/model/User.java b/src/com/example/model/User.java
new file mode 100644
index 0000000..5678a1e
--- /dev/null
+++ b/src/com/example/model/User.java
@@ -0,0 +1,20 @@
+package com.example.model;
+
+public class User {
+ private int id;
+ private String username;
+ private String password;
+ private String role; // admin or user
+
+ public int getId() { return id; }
+ public void setId(int id) { this.id = id; }
+
+ public String getUsername() { return username; }
+ public void setUsername(String username) { this.username = username; }
+
+ public String getPassword() { return password; }
+ public void setPassword(String password) { this.password = password; }
+
+ public String getRole() { return role; }
+ public void setRole(String role) { this.role = role; }
+}
diff --git a/src/com/example/servlet/ItemServlet.java b/src/com/example/servlet/ItemServlet.java
new file mode 100644
index 0000000..7c62460
--- /dev/null
+++ b/src/com/example/servlet/ItemServlet.java
@@ -0,0 +1,54 @@
+package com.example.servlet;
+
+import com.example.dao.ItemDAO;
+import com.example.model.Item;
+
+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 javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.util.List;
+
+@WebServlet("/items")
+public class ItemServlet extends HttpServlet {
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ try {
+ List
- list = new ItemDAO().listAll();
+ request.setAttribute("list", list);
+ request.getRequestDispatcher("items.jsp").forward(request, response);
+ } catch (Exception e) {
+ throw new ServletException(e);
+ }
+ }
+
+ @Override
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ HttpSession session = request.getSession();
+ ItemDAO dao = new ItemDAO();
+ try {
+ String action = request.getParameter("action");
+ if ("add".equals(action)) {
+ Item item = new Item();
+ item.setName(request.getParameter("name"));
+ item.setQuantity(Integer.parseInt(request.getParameter("quantity")));
+ dao.insert(item);
+ } else if ("edit".equals(action)) {
+ Item item = new Item();
+ item.setId(Integer.parseInt(request.getParameter("id")));
+ item.setName(request.getParameter("name"));
+ item.setQuantity(Integer.parseInt(request.getParameter("quantity")));
+ dao.update(item);
+ } else if ("delete".equals(action)) {
+ int id = Integer.parseInt(request.getParameter("id"));
+ dao.delete(id);
+ }
+ response.sendRedirect("items");
+ } catch (Exception e) {
+ throw new ServletException(e);
+ }
+ }
+}
diff --git a/src/com/example/servlet/LoginServlet.java b/src/com/example/servlet/LoginServlet.java
new file mode 100644
index 0000000..06c0d45
--- /dev/null
+++ b/src/com/example/servlet/LoginServlet.java
@@ -0,0 +1,33 @@
+package com.example.servlet;
+
+import com.example.dao.UserDAO;
+import com.example.model.User;
+
+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 javax.servlet.http.HttpSession;
+import java.io.IOException;
+
+@WebServlet("/login")
+public class LoginServlet extends HttpServlet {
+ @Override
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ String username = request.getParameter("username");
+ String password = request.getParameter("password");
+ try {
+ User user = new UserDAO().findByUsername(username);
+ if (user != null && user.getPassword().equals(password)) {
+ HttpSession session = request.getSession();
+ session.setAttribute("user", user);
+ response.sendRedirect("items.jsp");
+ } else {
+ response.sendRedirect("login.jsp?error=1");
+ }
+ } catch (Exception e) {
+ throw new ServletException(e);
+ }
+ }
+}
diff --git a/src/com/example/servlet/RegisterServlet.java b/src/com/example/servlet/RegisterServlet.java
new file mode 100644
index 0000000..e8a4afb
--- /dev/null
+++ b/src/com/example/servlet/RegisterServlet.java
@@ -0,0 +1,31 @@
+package com.example.servlet;
+
+import com.example.dao.UserDAO;
+import com.example.model.User;
+
+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;
+
+@WebServlet("/register")
+public class RegisterServlet extends HttpServlet {
+ @Override
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ String username = request.getParameter("username");
+ String password = request.getParameter("password");
+ String role = request.getParameter("role");
+ User user = new User();
+ user.setUsername(username);
+ user.setPassword(password);
+ user.setRole(role);
+ try {
+ new UserDAO().insert(user);
+ response.sendRedirect("login.jsp");
+ } catch (Exception e) {
+ throw new ServletException(e);
+ }
+ }
+}
diff --git a/src/com/example/util/DBUtil.java b/src/com/example/util/DBUtil.java
new file mode 100644
index 0000000..f66d77c
--- /dev/null
+++ b/src/com/example/util/DBUtil.java
@@ -0,0 +1,26 @@
+package com.example.util;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+
+public class DBUtil {
+ private static final String URL = "jdbc:mysql://localhost:3306/management?useSSL=false&serverTimezone=UTC";
+ private static final String USER = "root";
+ private static final String PASSWORD = "password";
+
+ static {
+ try {
+ Class.forName("com.mysql.cj.jdbc.Driver");
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static Connection getConnection() {
+ try {
+ return DriverManager.getConnection(URL, USER, PASSWORD);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+}