- servelt/Java Resource/src/main/java에 Package생성[xyz.itwill.dto]
- [xyz.itwill.dto] Package에 PhoneBookDTO 클래스 생성
🎨PHONEBOOK 테이블의 회원정보를 저장하기 위한 클래스
📌 DTO(Data Transfer Object) 클래스 : 테이블의 행정보를 저장하여 전달하기 위한 클래스 - VO 클래스
📃PhonebookDTO.java
package xyz.itwill.dto; // //DTO(Data Transfer Object) 클래스 : 테이블의 행정보를 저장하여 전달하기 위한 클래스 - VO 클래스 // /* 이름 널? 유형 ------- -------- ------------ PHONE NOT NULL VARCHAR2(20) NAME VARCHAR2(20) ADDRESS VARCHAR2(50) */ // //PHONEBOOK 테이블의 회원정보를 저장하기 위한 클래스 public class PhonebookDTO { private String phone; private String name; private String address; // //기본 생성자 : [ctal] + [space] >> Constructor 선택 public PhonebookDTO() { // TODO Auto-generated constructor stub } //생성자 : [Alt]+[Shift]+[S] >> [O] >> 필드 선택 >> Generate public PhonebookDTO(String phone, String name, String address) { super(); this.phone = phone; this.name = name; this.address = address; } //Getter & Setter : [Alt]+[Shift]+[S] >> [R] >> 필드 선택 >> Generate public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
- servelt/Java Resource/src/main/java에 Package생성[xyz.itwill.dao]
- [xyz.itwill.dao] Package에 PhoneBookDAO 클래스 생성
🎨PHONEBOOK 테이블에 회원정보를 삽입,변경,삭제,검색하는 기능을 제공하는 클래스
📌 DAO(Data Access Object) 클래스 : 테이블에 행 삽입,변경,삭제,검색 명령(SQL)을 전달하여 실행하고 처리 결과를 Java 객체(값)으로 반환하는 기능을 제공하는 클래스
→ 싱글톤 클래스(프로그램에 객체를 하나만 제공하는 클래스)로 작성하는 것을 권장public class PhonebookDAO { private static PhonebookDAO _dao; // public PhonebookDAO() { // TODO Auto-generated constructor stub } static { _dao=new PhonebookDAO(); } public static PhonebookDAO getDAO() { return _dao; }
📢 PHONEBOOK 테이블에 저장된 모든 회원정보를 검색하여 반환하는 메소드
public List<PhonebookDTO> selectPhonebookList() { Connection con=null; PreparedStatement pstmt=null; ResultSet rs=null; List<PhonebookDTO> phonebookList=new ArrayList<PhonebookDTO>(); try {//try 작성전 JdbcDAO 클래스 생성
🥎JdbcDAO 클래스 생성
📌 JDBC 기능을 제공하는 DAO 클래스가 상속받기 위해 작성된 부모클래스
→ 객체 생성이 목적이 아닌 상속을 목적으로 작성된 클래스 - 추상클래스로 작성하는 것을 권장(abstract)
→ WAS 프로그램에 등록된 자원을 얻어와 DataSource 객체를 반환받아 저장 - 정적영역을 이용하여 한번만 실행
→ DataSource 객체로부터 Connection 객체를 제공받아 반환하는 메소드
→ 매개변수로 JDBC 관련 객체를 제공받아 제거하는 메소드📃JdbcDAO.java
package xyz.itwill.dao; // import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; // //JDBC 기능을 제공하는 DAO 클래스가 상속받기 위해 작성된 부모클래스 //→ 객체 생성이 목적이 아닌 상속을 목적으로 작성된 클래스 - 추상클래스로 작성하는 것을 권장(abstract) //→ WAS 프로그램에 등록된 자원을 얻어와 DataSource 객체를 반환받아 저장 - 정적영역을 이용하여 한번만 실행 //→ DataSource 객체로부터 Connection 객체를 제공받아 반환하는 메소드 //→ 매개변수로 JDBC 관련 객체를 제공받아 제거하는 메소드 import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; // public abstract class JdbcDAO { private static DataSource dataSource; // static { try { dataSource=(DataSource)new InitialContext().lookup("java:comp/env/jdbc/oracle"); } catch (NamingException e) { e.printStackTrace(); } } //DataSource 객체로부터 Connection 객체를 제공받아 반환하는 메소드 public Connection getConnection() throws SQLException { return dataSource.getConnection();//SQLException 에러 떠넘기기 } //매개변수로 JDBC 관련 객체를 제공받아 제거하는 메소드 public void close(Connection con) { try { if(con!=null) con.close(); } catch (SQLException e) { e.printStackTrace(); } } public void close(Connection con, PreparedStatement pstmt) { try { if(pstmt!=null) pstmt.close(); if(con!=null) con.close(); } catch (SQLException e) { e.printStackTrace(); } } public void close(Connection con, PreparedStatement pstmt, ResultSet rs) { try { if(rs!=null) rs.close(); if(pstmt!=null) pstmt.close(); if(con!=null) con.close(); } catch (SQLException e) { e.printStackTrace(); } } }
con=getConnection(); // String sql="select * from phonebook order by phone"; pstmt=con.prepareStatement(sql); // rs=pstmt.executeQuery(); // while(rs.next()) { PhonebookDTO phonebook=new PhonebookDTO(); phonebook.setPhone(rs.getString("phone")); phonebook.setName(rs.getString("name")); phonebook.setAddress(rs.getString("address")); phonebookList.add(phonebook); } } catch (SQLException e) { System.out.println("[에러]selectPhonebookList() 메소드의 SQL 오류 = "+e.getMessage()); }finally { close(con, pstmt, rs); } return phonebookList;
📃PhonebookDAO
package xyz.itwill.dao; // //DAO(Data Access Object) 클래스 : 테이블에 행 삽입,변경,삭제,검색 명령(SQL)을 전달하여 실행하고 처리 결과를 Java 객체(값)으로 반환하는 기능을 제공하는 클래스 //→ 싱글톤 클래스(프로그램에 객체를 하나만 제공하는 클래스)로 작성하는 것을 권장 // //PHONEBOOK 테이블에 회원정보를 삽입,변경,삭제,검색하는 기능을 제공하는 클래스 // import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; // import xyz.itwill.dto.PhonebookDTO; // public class PhonebookDAO extends JdbcDAO { private static PhonebookDAO _dao; // public PhonebookDAO() { // TODO Auto-generated constructor stub } static { _dao=new PhonebookDAO(); } public static PhonebookDAO getDAO() { return _dao; } //PHONEBOOK 테이블에 저장된 모든 회원정보를 검색하여 반환하는 메소드 public List<PhonebookDTO> selectPhonebookList() { Connection con=null; PreparedStatement pstmt=null; ResultSet rs=null; List<PhonebookDTO> phonebookList=new ArrayList<PhonebookDTO>(); try {//try 작성전 JdbcDAO 클래스 생성 con=getConnection(); // String sql="select * from phonebook order by phone"; pstmt=con.prepareStatement(sql); // rs=pstmt.executeQuery(); // while(rs.next()) { PhonebookDTO phonebook=new PhonebookDTO(); phonebook.setPhone(rs.getString("phone")); phonebook.setName(rs.getString("name")); phonebook.setAddress(rs.getString("address")); phonebookList.add(phonebook); } } catch (SQLException e) { System.out.println("[에러]selectPhonebookList() 메소드의 SQL 오류 = "+e.getMessage()); }finally { close(con, pstmt, rs); } return phonebookList; } }
🎨PHONEBOOK 테이블에 저장된 모든 회원 정보를 검색하여 클라이언트에게 전달하는 서블릿 - DAO
📃PhonenookNewServlet
package xyz.itwill.servlet; // import java.io.IOException; import java.io.PrintWriter; import java.util.List; // 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 xyz.itwill.dao.PhonebookDAO; import xyz.itwill.dto.PhonebookDTO; //PHONEBOOK 테이블에 저장된 모든 회원 정보를 검색하여 클라이언트에게 전달하는 서블릿 - DAO @WebServlet("/new.itwill") public class PhonenookNewServlet extends HttpServlet { private static final long serialVersionUID = 1L; // protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out=response.getWriter(); // //PHONEBOOK 테이블에 저장된 모든 회원 정보를 검색하여 반환하는 DAO 클래스의 메소드 호출 List<PhonebookDTO> phonebookList=PhonebookDAO.getDAO().selectPhonebookList(); // out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<meta charset='UTF-8'>"); out.println("<title>Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>전화번호부</h1>"); out.println("<hr>"); out.println("<table border='1' cellspacing='0'>"); out.println("<tr>"); out.println("<th width='200'>전화번호</th>"); out.println("<th width='200'>이름</th>"); out.println("<th width='300'>주소</th>"); out.println("</tr>"); //List 객체에 저장된 요소를 반복적으로 제공받아 클라이언트에게 전달 for(PhonebookDTO phonebook:phonebookList) { out.println("<tr align='center'>"); out.println("<td>"+phonebook.getPhone()+"</td>"); out.println("<td>"+phonebook.getName()+"</td>"); out.println("<td>"+phonebook.getAddress()+"</td>"); out.println("</tr>"); } out.println("</table>"); out.println("</body>"); out.println("</html>"); } }