본문 바로가기
교육/Java&Spring

kosta 클라우드 네이티브 애플리케이션 개발 과정 day 34

by Renechoi 2023. 2. 11.

책 대여 프로그램 서블릿으로 만들기 

 

jsp 를 사용한 모델 1 방식 

 

package com.vo;

public class GuestbookVo {
  private int    no;
  private String name     ;
  private String password ;
  private String content  ;
  private String reg_date ;
  /**
   * @return the no
   */
  public int getNo() {
    return no;
  }
  /**
   * @param no the no to set
   */
  public void setNo(int no) {
    this.no = no;
  }
  /**
   * @return the name
   */
  public String getName() {
    return name;
  }
  /**
   * @param name the name to set
   */
  public void setName(String name) {
    this.name = name;
  }
  /**
   * @return the password
   */
  public String getPassword() {
    return password;
  }
  /**
   * @param password the password to set
   */
  public void setPassword(String password) {
    this.password = password;
  }
  /**
   * @return the content
   */
  public String getContent() {
    return content;
  }
  /**
   * @param content the content to set
   */
  public void setContent(String content) {
    this.content = content;
  }
  /**
   * @return the reg_date
   */
  public String getReg_date() {
    return reg_date;
  }
  /**
   * @param reg_date the reg_date to set
   */
  public void setReg_date(String reg_date) {
    this.reg_date = reg_date;
  }
  /**
   * 
   */
  public GuestbookVo() {
  }
  /**
   * @param no
   * @param name
   * @param password
   * @param content
   * @param reg_date
   */
  public GuestbookVo(int no, String name, String password, String content, String reg_date) {
    this.no = no;
    this.name = name;
    this.password = password;
    this.content = content;
    this.reg_date = reg_date;
  }
  
  /**
   * @param name
   * @param password
   * @param content
   * @param reg_date
   */
  public GuestbookVo(String name, String password, String content) {
    this.name = name;
    this.password = password;
    this.content = content;
  }
  
  @Override
  public String toString() {
    return "GuestBookVo [no=" + no + ", name=" + name + ", password=" + password + ", content=" + content
        + ", reg_date=" + reg_date + "]";
  }
  
}

 

 

 

package com.dao;

import java.util.ArrayList;

import com.vo.GuestbookVo;

public interface GuestbookDao {

  public ArrayList<GuestbookVo> getList();
  public boolean insert(GuestbookVo vo) ;
  public boolean delete(GuestbookVo vo) ;

}

 

 

 

package com.dao;

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

import com.vo.GuestbookVo;

public class GuestbookDaoImpl implements GuestbookDao {

  private DBConnectionMgr pool;

  public GuestbookDaoImpl() {
    try {
      pool = DBConnectionMgr.getInstance();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public ArrayList<GuestbookVo> getList() {

    // 0. import java.sql.*;
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    ArrayList<GuestbookVo> list = new ArrayList<GuestbookVo>();

    try {
      conn = pool.getConnection();
      
      // 3. SQL문 준비 / 바인딩 / 실행
      String query  = " SELECT NO, \n";
             query += "        NAME, \n";
             query += "        PASSWORD, \n";
             query += "        CONTENT, \n";
             query += "        TO_CHAR(REG_DATE, 'YYYY-MM-DD HH:mm:SS') REG_DATE \n";
             query += " FROM GUESTBOOK \n";
             query += " ORDER BY NO DESC" ;
      pstmt = conn.prepareStatement(query);
      
      rs = pstmt.executeQuery();
      
      // 4.결과처리
      while(rs.next()) {
        int no = rs.getInt("no");
        String name = rs.getString("name");
        String password = rs.getString("password");
        String content = rs.getString("content");
        String reg_date = rs.getString("reg_date");
        
        GuestbookVo vo = new GuestbookVo(no, name, password, content, reg_date);
        list.add(vo);
      }
      
    } catch (SQLException e) {
      System.out.println("error:" + e);
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      // 5. 자원정리
      try {
        if (rs != null) {
          rs.close();
        }
        if (pstmt != null) {
          pstmt.close();
        }
        if (conn != null) {
          pool.freeConnection(conn);
        }
      } catch (SQLException e) {
        System.out.println("error:" + e);
      }

    }

    return list;
  }
  
  
  public boolean insert(GuestbookVo vo) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    int count = 0 ;
    
    try {
      conn = pool.getConnection();
      
      String query ="insert into guestbook values (seq_guestbook_no.nextval, ?, ?, ?, sysdate)";
      pstmt = conn.prepareStatement(query); 
      
      pstmt.setString(1, vo.getName());
      pstmt.setString(2, vo.getPassword());
      pstmt.setString(3, vo.getContent());
    
      count = pstmt.executeUpdate();
      
      System.out.println(count + "건 등록");
      
    } catch (SQLException e) {
      System.out.println("error:" + e);
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        if (pstmt != null) pstmt.close();
        if (conn != null) pool.freeConnection(conn);
      } catch (SQLException e) {
        System.out.println("error:" + e);
      }
    }
    return (count>0)?true:false;
  }
  
  public boolean delete(GuestbookVo vo) {
    Connection conn = null;
    PreparedStatement pstmt = null;
    int count = 0 ;
    
    try {
      System.out.println("vo = " + vo);
      conn = pool.getConnection();
      
      String query ="delete from guestbook where no = ? and password= ?";
      pstmt = conn.prepareStatement(query); 
      
      pstmt.setInt(1, vo.getNo());
      pstmt.setString(2, vo.getPassword());
      
      count = pstmt.executeUpdate();
      
      System.out.println(count + "건 삭제");
      
    } catch (SQLException e) {
      System.out.println("error:" + e);
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        if (pstmt != null) pstmt.close();
        if (conn != null) pool.freeConnection(conn);
      } catch (SQLException e) {
        System.out.println("error:" + e);
      }
    }
    return (count>0)?true:false;
  }
  

}

 

 

model 1 방식 

- 브라우저에서 요청이 들어오면 jsp에서 받는다

- 자신 또는 다른 클래스를 이용하여 작업을 처리한다

- 처리한 결과를 클라이언트에 출력한다. 

 

- 장점 : 구조가 단순하여 익히기가 쉽고 숙련된 개발자가 아니더라도 구현이 용이 

- 단점 : 출력을 위한 뷰 코드와 로직 처리를 위한 자바코드가 섞여 있어 코드가 복잡, jsp ㅗ크데엇 백엔드와 프론트엔드가 혼재하기 때문에 분업이 용이하지 않음 

 

 

 

model2 방식 

- 요청이 들어오면 처리를 위한 흐름 제어는 controller인 서블릿이 담당한다. 

- 요청 처리에 필요한 로직은 서비스 클래스가 담당한다. 

- 요청 결과는 view인 jsp가 담당한다. 

 

- 장점 : 출력을 위한 view 코드와 로직처리를 위한 자바 코드가 나뉘어 있다. 분업이 용이하다. 모델 1에 비해 복잡하지 않다. 

- 단점 : 구조가 복잡하고 습득이 어렵고 작업량이 많다. java에 대한 깊은 이해가 필요하다. 

 

 


 

서블릿으로 emaillist 구현하기 

 

package com.example.emaillist_2;

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

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet(description = "이메일리스트 서블릿", urlPatterns = {"/emaillist"})
public class EmaillistServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public EmaillistServlet() {
      super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      System.out.println("EmaillistServlet.doGet() 호출");
      request.setCharacterEncoding("utf-8");

      String actionName = request.getParameter("a");
      
      if("deleteform".equals(actionName)) {
        System.out.println("actionName => " + actionName);
        RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/emaillist2/deleteform.jsp");
        rd.forward(request, response);
      }else if("add".equals(actionName)) {
        System.out.println("actionName => " + actionName);
        request.setCharacterEncoding("UTF-8");
        String lastName = request.getParameter("ln");
        String firstName = request.getParameter("fn");
        String email = request.getParameter("email");
        
        EmaillistVo vo = new EmaillistVo(lastName, firstName, email);
        
        EmaillistDao dao = new EmaillistDao();
        dao.insert(vo);

        response.sendRedirect("/helloJSP/emaillist2");
      }else if("delete".equals(actionName)) {
        System.out.println("actionName => " + actionName);
        request.setCharacterEncoding("utf-8");
        
        String no = request.getParameter("no");
        
        EmaillistDao dao = new EmaillistDao();
        //dao.delete(no);
        
        response.sendRedirect("/helloJSP/emaillist2");
      }else {
        // list 
        System.out.println("actionName => " + actionName);
        EmaillistDao dao = new EmaillistDao();
        List<EmaillistVo> list = dao.getList();

        request.setAttribute("list", list);

        RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/emaillist/index.jsp");
        rd.forward(request, response);
      }
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

 

반응형