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;
}
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;
}
}
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에 등록해주면 된다.
다음글에서는 게시글 전체리스트를 만들어 보겠다.