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 |