이제 진짜 Servlet 맛보기! DB와 연결해 보자

이제 진짜 Servlet 맛보기! DB와 연결해 보자

1.Servlet의 Business Logic처리

Servlet은 클라이언트의 요청을 받고, Business Logic을 이용해 데이터 처리를 하고 그 결과를 클라이언트에게 전송한다.

Servlet의 Business Logic은 DB와 연동하거나 다른 서버에서 데이터를 얻어내는 작업을 한다.

그렇다면 Servlet은 DB와 어떻게 연결할 수 있을까.

2. Servlet을 DB 연결을 위해 준비할 것

크게 두가지가 필요하다.

"1. 데이터를 처리할 클래스" 그리고 "2. 이클립스와 DB를 연결하는 드라이버"

데이터를 처리하는 클래스는 다양할 수 있지만, 여기서는 DAO와 VO 클래스를 사용한다.

DAO(Data Access Object)는 DB와의 연결을 담당하는 객체이다.

쉽게 말해 Servlet과 DB의 중계인인 셈이다.

VO(Value Object)는 데이터를 get, set하여 관리하는 객체이다.

쉽게 말해 데이터 주머니라고 할 수 있다.

단순히 말로만 설명을하면 DAO와 VO는 막연하므로 코드를 보는 것이 이해에 더 도움이 된다.

클래스가 준비되었다면, 드라이버까지 갖추어 져야 DB와 연결이 가능하다.

드라이버는 "ojdbc8.jar" 이런식으로 생겼을 것이다. 버전은 각자 다를 수 있다.

드라이버를 얻기 위해서는 다운을 받는 방법도 있지만, oracle/JDBC/lib 안의 드라이버를 사용할 수 있다.

드라이버가 준비되었다면, Context의 Web-INF/lib 파일에 드라이버를 반드시 넣어주어야 정상 작동이 된다.

3. 연결을 위한 Servlet

import java.io.IOException; //(생략) @WebServlet("/test") public class testrServlet extends HttpServlet{ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); testDAO dao = new testDAO(); String command = request.getParameter("command"); if(command != null && command.equals("addMember")) { String _id = request.getParameter("id"); String _pwd = request.getParameter("pwd"); testVO vo = new testVO(); vo.setId(_id); vo.setPwd(_pwd); dao.addMember(vo); } else if(command != null && command.equals("delMember")) { System.out.println("delMember"); String id = request.getParameter("id"); dao.delMember(id); } List list = dao.listMembers(); out.print(""); for(int i=0; i"); } out.print(""); } }

import java.sql.Date; public class testVO { private String id; private String pwd; public MemberVO() { System.out.println("test VO"); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }

import java.sql.Connection; //(생략) public class testDAO { private PreparedStatement pstmt; private Connection con; private DataSource dataFactory; public testDAO() { try { Context ctx = new InitialContext(); Context envContext=(Context)ctx.lookup("java:/comp/env"); dataFactory = (DataSource) envContext.lookup("jdbc/oracle"); } catch(Exception e) { e.printStackTrace(); } } public List listMembers() { List list = new ArrayList(); try { //connDB(); con = dataFactory.getConnection(); String query = "select * from t_member"; System.out.println(query); pstmt = con.prepareStatement(query); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { String id = rs.getString("id"); String pwd = rs.getString("pwd"); testVO vo = new testVO(); vo.setId(id); vo.setPwd(pwd); list.add(vo); } rs.close(); pstmt.close(); con.close(); } catch(Exception e) { e.printStackTrace(); } return list; } public void addMember(MemberVO memberVO) { try { con = dataFactory.getConnection(); String id = memberVO.getId(); String pwd = memberVO.getPwd(); String query = "insert into t_member"; query += " (id,pwd)"; query += " values(?,?)"; System.out.println(query); pstmt = con.prepareStatement(query); pstmt.setString(1, id); pstmt.setString(2, pwd); pstmt.executeUpdate(); pstmt.close(); } catch(Exception e) { e.printStackTrace(); } } public void delMember(String id) { try { con = dataFactory.getConnection(); String query = "delete from t_member" + " where id=?"; System.out.println("prepareStatememt:" + query); pstmt = con.prepareStatement(query); pstmt.setString(1, id); pstmt.executeUpdate(); pstmt.close(); } catch(Exception e) { e.printStackTrace(); } } }

from http://y39ism.tistory.com/7 by ccl(A) rewrite - 2021-09-13 20:26:58