JSP/JSTL 라이브러리

[JSP] 55. JSTL을 사용하여 CRUD 프로그램 만들기

Song hyun 2024. 7. 12. 14:21
728x90
반응형

[JSP] 55. JSTL을 사용하여 CRUD 프로그램 만들기

1. UserDTO

package models;

import lombok.Data;

@Data
public class User {
	
	private int id;
	private String username;
	private String password;
	private String email;

}

 

2. UserDAOImpl

package repasitory;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import models.User;

/*
 * 인터페이스 설계 생략...
 */
public class userDAOImpl {
	
	private static final String URL="jdbc:mysql://localhost:3306/demo3?serverTimezon=Asia/Seoul";
	private static final String USER="root";
	private static final String PASSWORD="asd123";

	public userDAOImpl() {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	private Connection getCoonection() throws SQLException {
		return DriverManager.getConnection(URL, USER, PASSWORD);
	}
	
	public List<User> getAllUsers(){
		List<User> users=new ArrayList<>();
		String sql=" SELECT * FROM users ";
		try (Connection conn=getCoonection();
				PreparedStatement pstmt=conn.prepareStatement(sql);
				ResultSet rs=pstmt.executeQuery()){
			while (rs.next()) {
				User user=new User();
				user.setId(rs.getInt("id"));
				user.setUsername(rs.getString("username"));
				user.setEmail(rs.getString("email"));
				users.add(user);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return users;
	}
}
UserDAOImple 클래스가 인터페이스 설계를 포함하지 않은 경우,
SOLID 원칙 중 다음 원칙들이 위배될 사항들은 뭐가 있을까?


❗ 단일 책임 원칙(Single Responsibility Principle, SRP)
-이 클래스가 인터페이스를 포함하지 않으면, 이 클래스는 데이터베이스와 직접적으로 연결되고, 데이터를 조작하는 역할을 모두 수행하게 된다. => 데이터 접근 로직, 비즈니스 로직이 혼합될 가능성이 높다.

❗❗ 인터페이스 분리 법칙(Interface Segregation Principle, ISP)
-이는 

❗❗❗ 의존성 역전 원칙(Dependency Inversion Principle, DIP)
-DIP는 고수준 모듈이 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다.
=>

 

3. UserList.jsp

<%@page import="java.util.List"%>
<%@page import="models.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>USERLIST PAGE</h1>
	<%
	List<User> userList=(List<User>)request.getAttribute("userList");
	%>
	
	<table border="1">
		<tr>
			<th>ID</th>
			<th>이름</th>
			<th>이메일</th>
		</tr>
		<%
		for(User user : userList) {
		%>
			<td><%=user.getId()%></td>
			<td><%=user.getPassword()%></td>
			<td><%=user.getEmail()%></td>
		<% } %>
	</table>
</body>
</html>

 

4. UserList2.jsp

<%@page import="java.util.List"%>
<%@page import="models.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>USERLIST PAGE</h1>
	<c:choose>
		<c:when test="${not empty userList}">
		<table border="1">
			<tr>
				<th>ID</th>
				<th>이름</th>
				<th>이메일</th>
			</tr>
			<c:forEach var="user" items="${userList}">
			<tr>
				<td><c:out value="${user.id}"/></td>
				<td><c:out value="${user.username}"/></td>
				<td><c:out value="${user.email}"/></td>
			</tr>
			</c:forEach>
		</table>
			<!-- users가 null이 아니ㅏ면 사용 HTML 태그 및 값 사용 -->
			여기 부분이 실행됨...
		</c:when>
		<c:otherwise>
			<p>등록된 사용자가 없습니다.</p>
		</c:otherwise>
	</c:choose>
	
</body>
</html>

 

5. UserController

package controller;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import models.User;
import repasitory.userDAOImpl;

import java.io.IOException;
import java.util.List;

@WebServlet("/user/*")
public class UserController extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private userDAOImpl userDAOImpl;
     
   
    public UserController() {
        userDAOImpl=new userDAOImpl();
    }

	// http://localhost:8080/jstl/user/list?id=123&name=길동
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 전체 URL 문자를 반환 변환하려겸
		String fullURL=request.getRequestURL().toString();
		System.out.println(" full url : "+fullURL);
		
		// URL의 쿼리 문자열을 반환합니다.
		String queryString=request.getQueryString();
		System.out.println("queryString : "+queryString);
		
		// 컨텍스트 루트 경로를 반환받고 싶다면
		String contextPath=request.getContextPath();
		System.out.println("contextPath : "+contextPath);
		
		// URL 마지막 경로 (앤드포인트)를 반환받고 싶다면
		// mvc/list
		String pathInfo=request.getPathInfo();
		System.out.println("pathInfo : "+pathInfo);
		
		switch (pathInfo) {
		case "/list": {
			userListPage(request,response);
			break;
		}
		default:
			break;
		}
	}


	private void userListPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// getAllUsers 호출
		// UserDAOImpl.getAllUsers()
		List<User> users=userDAOImpl.getAllUsers();
		request.setAttribute("userList", users);
		request.getRequestDispatcher("/WEB-INF/user/userList2.jsp").forward(request, response);
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
728x90
반응형