- [JSP] 55. JSTL을 사용하여 CRUD 프로그램 만들기2024년 07월 12일
- Song hyun
- 작성자
- 2024.07.12.: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반응형'JSP > JSTL 라이브러리' 카테고리의 다른 글
[JSP] 54. JSTL 라이브러리의 사용 (0) 2024.07.12 [JSP] 53. JSTL 라이브러리의 설치 및 적용 (0) 2024.07.12 [JSP] 52. JSTL 라이브러리의 개념과 종류 (0) 2024.07.12 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)