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)){ %> +
+ +
+
+ +
+
+ +
+
+ +
+
+
+<% } %> + + + <% if("admin".equals(role)){ %><% } %> + + + <% for(Item item: list){ %> + + + + + <% if("admin".equals(role)){ %> + + <% } %> + + <% } %> + +
IDNameQuantityActions
<%= item.getId() %><%= item.getName() %><%= item.getQuantity() %> +
+ + + +
+
+ + 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
+<% } %> +
+
+ + +
+
+ + +
+ + Register +
+ + 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

+
+
+ + +
+
+ + +
+
+ + +
+ + Login +
+ + 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); + } + } +}