책 대여 프로그램 서블릿으로 만들기
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);
}
}
반응형
'교육 > Java&Spring' 카테고리의 다른 글
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 41 (1) | 2023.02.21 |
---|---|
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 40 (0) | 2023.02.20 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 33 (0) | 2023.02.08 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 32 (0) | 2023.02.07 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 31 (0) | 2023.02.04 |