티스토리 뷰

반응형

- 서블릿 비즈니스 처리 작업이란 서블릿이 클라이언트로부터 요청을 받으면 요청에 대해 작업을 수행하는 것을 의미한다.

- 프로그램에서 대부분의 비즈니스 처리 작업은 DB 연동 관련 작업이지만 외에 다른 서버와 연동해서 데이터를 얻는 작업도 수행한다.

- 기능은 서블릿의 핵심 기능이라 있을 만큼 중요하다.

- 서블릿의 비즈니스 처리 과정

 

  1. 클라이언트로부터 요청을 받는다.
  2. DB 연동과 같은 비즈니스 로직을 처리
  3. 처리 결과를 클라이언트에게 돌려준다.

 

예제 처리 과정

 

1. 브라우저가 서블릿에게 회원 정보를 요청

2. MemberServlet 요청을 받은 MemberDAO 객체를 생성하여 listMembers() 메서드를 호출

3. listMembers() 에서 다시 connDB() 메서드를 호출하여 DB 연결한 SQL 문을 실행해 회원 정보를 조회

4. 조회된 회원 정보를 MemberVO 속성에 설정한 ArrayList 저장

5. ArrayList 다시 메서드를 호출한 MemberServlet으로 반환한 ArrayList MemberVO 차례대로 가져와 회원 정보를 HTML 태그의 문자열로 만듦

6. 만들어진 HTML 태그를 브라우저로 전송해서 회원 정보를 출력

 

DB Table 생성

- 다음과 같이 테이블을 생성한다. 사용된 DB는 MariaDB 10.6이다.

	CREATE TABLE `t_member` (
	  `id` varchar(10) NOT NULL,
	  `pwd` varchar(10) DEFAULT NULL,
	  `name` varchar(50) DEFAULT NULL,
	  `email` varchar(50) DEFAULT NULL,
	  `joinDate` datetime DEFAULT current_timestamp(),
	  PRIMARY KEY (`id`)
	) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

 

데이터 삽입

- 생성한 테이블에 사용할 회원 레코드를 삽입한다.

INSERT INTO java_web.t_member VALUES('hong', '1234', '홍길동', 'hong@gmail.com', now());
INSERT INTO java_web.t_member VALUES('lee', '1234', '이순신', 'lee@gmail.com', now());
INSERT INTO java_web.t_member VALUES('kim', '1234', '김유신', 'kim@gmail.com', now());

 

드라이버 적용

- JDBC 사용을 위해 커넥터 라이브러리를 사용해야 한다.

- 다음 링크에서 커넥터를 다운로드하여 사용한다.

https://downloads.mysql.com/archives/c-j/

 

MySQL :: Download MySQL Connector/J (Archived Versions)

Please note that these are old versions. New releases will have recent bug fixes and features! To download the latest release of MySQL Connector/J, please visit MySQL Downloads. MySQL open source software is provided under the GPL License.

downloads.mysql.com

- ZIP 파일을 다운로드하여 압축을 해제하고 폴더 안을 보면 mysql-connector-java-8.0.18.jar 파일이 존재하며 이 파일을 사용하면 된다.

- 적용은 프로젝트 내 WEB-INF/lib 디렉터리 안에 넣어 Build Path를 적용한다.

파일을 넣고...
[Add JARs...] 버튼을 눌러 해당 파일을 선택하여 적용한다.

 

코드 작성

 

* MemberServlet.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
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 dao.MemberDAO;
import vo.MemberVO;

/**
 * Servlet implementation class MemberServlet
 */
@WebServlet("/member")
public class MemberServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		MemberDAO dao = new MemberDAO();
		List list = dao.listMembers();
		
		out.print("<html><body>");
	      out.print("<table  border=1><tr align='center' bgcolor='lightgreen'>");
	      out.print("<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td><td>가입일</td></tr>");
	     
	     for (int i=0; i<list.size();i++){
			MemberVO memberVO=(MemberVO) list.get(i);
			String id=memberVO.getId();
			String pwd = memberVO.getPwd();
			String name=memberVO.getName();
			String email=memberVO.getEmail();
			Date joinDate = memberVO.getJoinDate();
			out.print("<tr><td>"+id+"</td><td>"+
				                pwd+"</td><td>"+
				                name+"</td><td>"+
				                email+"</td><td>"+
				                joinDate+"</td></tr>");		
	      }
	      out.print("</table></body></html>");

	}

}

 

* MemberDAO.java

package dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import vo.MemberVO;

public class MemberDAO {
	private String url = "jdbc:mysql://localhost:3306/java_web";
	private String dbUser = "root";
	private String dbPass = "dbpass";
	
	private Connection conn;
	private PreparedStatement pstmt;

	
	
	public List listMembers() {
		List list = new ArrayList();
		try {
			connDB();
			String query = "select * from t_member ";
			System.out.println("prepareStatememt: " + query);
			pstmt = conn.prepareStatement(query);
			ResultSet rs = pstmt.executeQuery();
			while (rs.next()) {
				String id = rs.getString("id");
				String pwd = rs.getString("pwd");
				String name = rs.getString("name");
				String email = rs.getString("email");
				Date joinDate = rs.getDate("joinDate");
				MemberVO vo = new MemberVO();
				vo.setId(id);
				vo.setPwd(pwd);
				vo.setName(name);
				vo.setEmail(email);
				vo.setJoinDate(joinDate);
				list.add(vo);
			}
			rs.close();
			pstmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

	private void connDB() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("MySql 드라이버 로딩 성공");
			conn = DriverManager.getConnection(url, dbUser, dbPass);
			System.out.println("Connection 생성 성공");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 

* MemberVO.java

package vo;

import java.sql.Date;

public class MemberVO {
	private String id;
	private String pwd;
	private String name;
	private String email;
	private Date joinDate;
	
	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;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Date getJoinDate() {
		return joinDate;
	}
	public void setJoinDate(Date joinDate) {
		this.joinDate = joinDate;
	}
}

 

- 코드 작성 후 톰캣을 재시작하고 브라우저에서 localhost:[port]/[project_name]/member 로 접근하여 DB에 입력된 정보를 조회한다.

 

조회 결과

- DB에 입력된 레코드가 출력될 것이다.

반응형

'Servlet' 카테고리의 다른 글

서블릿 - 비즈니스 로직(회원 정보 등록)  (0) 2024.08.11
DataSource를 이용한 DB 연동  (0) 2024.08.11
GET/POST 전송 방식  (0) 2024.08.11
서블릿 - 응답  (0) 2024.08.11
서블릿 - 클라이언트 요청 얻기  (0) 2024.08.11
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함