게시판 만들기 6

msriver·2020년 6월 2일
1

JSP&Servlet

목록 보기
7/13

🆗 현재까지 한것

  • DB에 게시글 데이터를 담아 사용하기 위해 board 테이블을 생성 및 샘플데이타 추가
  • DBCP 추가
  • DTO 만들기(=VO클래스=자바빈클래스)
  • jstl라이브러리 추가
  • BoardDAO클래스 생성, DBManager클래스 생성

💡 진행 방향

  • 지금까지 한 작업들은 MVC패턴에서 데이터를 담당하는 Model 부분을 어느정도 구축해놓은 상태이다.
  • Controller역할을 하는 Servlet을 만들고, 이 게시판에서는 커맨드패턴을 같이 사용하기 때문에 요청을 하는 커맨드(파라미터)에 따라 비지니스로직을 수행하는 Action클래스를 돌릴 공장, ActionFactory클래스를 만들것이다.
  • Action은 DAO에 등록한 메서드를 이용하여 비지니스 로직을 처리하는 클래스이다.
  • Action 인터페이스를 만들어 비지니스로직처리 클래스를 컨트롤러가 동일한 방식으로 접근할 수 있도록 한다.

Action Interface

package com.msriver.action;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface Action {
	public void execute(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException;
}

Action Factory

command패턴으로 작업처리를 위한 클래스이다.

package com.msriver.controller;

import com.msriver.action.Action;

public class ActionFactory {
	private ActionFactory() {};
	private static ActionFactory instance = new ActionFactory();
	
    //ActionFactory클래스도 싱글톤패턴으로 만들었다.
	public static ActionFactory getInstance() {
		return instance;
	}
	
    //command에 맞는 action을 생산한다.
	public Action getAction(String command) {
		Action action = null;
        	// 아직 Action클래스들을 만들지 않았지만
        	// 이부분에 이제 action클래스를 생성하는 코드가 작성될것.
		return action;
	}
}

BoardServlet (Controller)

package com.msriver.controller;

import java.io.IOException;

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 com.msriver.action.Action;

/**
 * Servlet implementation class BoardServlet
 */
@WebServlet("/BoardServlet")
public class BoardServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public BoardServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String command = request.getParameter("command");
		
		ActionFactory af = ActionFactory.getInstance();
		Action action = af.getAction(command);
		if(action!=null) {
			action.execute(request, response);
		}
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("UTF-8");
		doGet(request, response);
	}

}

위에서 만든 녀석들의 순서? 흐름? 그런걸 정리하자면
1. Servlet에서 사용자의 요청을 받는다.
2. 즉 사용자가 원하는 요청은 모두 BoardServlet으로 오게 되고 이 서블릿에서는 파라미터로 전달받은 command를 actionfactory의 getAction()메서드에 전달해준다.
3. 그럼 actionfactory에서 해당 요청을 처리하는 action객체를 만들어 반환해주고
4. Servlet에서는 request객체와 response객체를 해당 action의 execute()메서드에 전달해준다.

이 Servlet은 이제 건들필요가 없다. 그저 Action클래스 만들어 주고 ActionFactory에 등록해주면 된다.

다음글에서는 게시글 전체리스트를 만들어 보겠다.

profile
NOBODY

0개의 댓글