Back/JSP

서블릿의 비즈니스 로직 처리 방법

soyeon26 2022. 1. 31. 07:36

웹 프로그램은 클라이언트의 요청에 대해서 비즈니스 처리 기능을 이용해 데이터 저장소에서 데이터를 조회한 후 서블릿의 응답 기능을 이용해 클라이언트에게 결과를 전송한다.

 

서블릿의 비즈니스 작업의 대표적인 예

∙ 웹사이트 로그인 요청 처리 작업

∙ 쇼핑몰 상품 주문 처리 작업

 

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

 

서블릿의 데이터베이스 연동과정

 

서블릿에서 데이터베이스와 연동하는 과정은 자바의 데이터베이스 연동 과정과 같다.

클라이언트로부터 요청을 받으면 서블릿은 SQL문을 사용해 데이터베이스에 접근하여 작업한다.

이 과정에서 DAO와 VO 클래스가 사용된다.

 

회원 정보 조회 과정

 

t_member 구성

회원정보 테이블을 생성한 후 회원 정보를 추가하여 웹 브라우저에서 서블릿으로 요청, 데이터베이스와 연동해 회원 정보를 웹 브라우저로 출력하는 작업

 

--회원 테이블 생성
create table t_member(
    id varchar2(10) primary key,
    pwd varchar2(10),
    name varchar2(50),
    email varchar2(50),
    joinDate date default sysdate
);

--회원 정보 추가
insert into t_member
values('hong', '1212', '홍길동', 'hong@gmail.com', sysdate);

insert into t_member
values('lee', '1212', '이순신', 'lee@test.com', sysdate);

insert into t_member
values('kim', '1212', '김유신', 'kim@jweb.com', sysdate);

commit;

select * from t_member;

오라클 데이터베이스와 연동하는데 필요한 드라이버인 ojdbc6.jar을 프로젝트의 [WebContent]-[Web/INF]-[lib]에 복붙한다.

MemberServlet.java

package sec01.ex01;

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;

@WebServlet("/member")
public class MemberServlet extends HttpServlet 
{
	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<MemberVO> 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>");
		
		for(int i=0; i < list.size(); i++)
		{
			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>" + pwd + "</td><td>" + name + "</td><td>" + email + "</td><td>" + joinDate + "</td><tr>");			
		}
		out.print("</table></body></html>");
	}
}

MemberDAO.java

package sec01.ex01;

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


public class MemberDAO 
{
	//필드
	private Statement stmt;
	private Connection con;
	
	String url = "jdbc:Oracle:thin:@localhost:1521:xe";
	String user = "scott";
	String pwd = "tiger";
	
	public MemberDAO() {
		
	}
	
	//메소드
	public List<MemberVO> listMembers()
	{
		List<MemberVO> list = new ArrayList<MemberVO>();
		
		try {
			connDB(); //네 가지 정보로 데이터베이스를 연결한다.
			String query = "select * from t_member";
			System.out.println(query);
			ResultSet rs = stmt.executeQuery(query);
			
			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();
			stmt.close();
			con.close();	
		}catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}//listMembers()메소드
	
	private void connDB()
	{
		try 
		{
			Class.forName("oracle.jdbc.driver.OracleDriver");
			System.out.println("Oracle 드라이버 로딩 성공");
			
			con = DriverManager.getConnection(url, user, pwd);
			System.out.println("Connection 생성 성공");
			
			stmt = con.createStatement();
			System.out.println("Statement 생성 성공");
		}
		catch(Exception e) 
		{
			e.printStackTrace();
		}	
	}
}

MemberVO.java

package sec01.ex01;

import java.sql.Date;

public class MemberVO 
{
	//필드
	private String id;
	private String pwd;
	private String name;
	private String email;
	private Date joinDate;
	
	//생성자
	public MemberVO() {
		System.out.println("MemberVO 생성자 호출");
	}
	
	//Getter/Setter 메소드
	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;
	}
}