@WebServlet("*.do")
// 톰캣(server)이 구동될때, xxx.do로 끝나는 요청에 대하여 FC를 호출하게됨
public class FrontController extends HttpServlet {
private static final long serialVersionUID = 1L;
//생성자 메서드에서 초기화를 하여 서버가 구동될때
//(new)힙 메모리를 하나씩만 사용할 수 있다.
private HandlerMapper mappings;
public FrontController() {
super();
mappings = new HandlerMapper();
}
//doGet doPost 요청이 들어오면 doAction 메서드를 호출해서 요청 처리
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doAction(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doAction(request, response);
}
private void doAction(HttpServletRequest request, HttpServletResponse response) {
// 1. 사용자가 무슨 요청을 했는지 추출 및 확인
String uri=request.getRequestURI();// 전체 URL를 가져오기
String cp=request.getContextPath();// Context 패스를 가져오기
String command=uri.substring(cp.length());// URL에서 Context 패스 만큼 잘라줍니다.
System.out.println("command : "+command);
// 2. 요청을 수행
// Action 객체를 HandlerMapper에서 가져옴
Action action = this.mappings.getAction(command);
// Action 객체를 실행하고, 그 결과로 ActionForward 객체를 반환받는다.
// ActionForward에 페이지 이동 정보를 포함하고 담아둔다.
ActionForward forward = action.execute(request, response);
// 3. 응답(페이지 이동 등)
// 1) 전달할 데이터가 있니? 없니? == 포워드? 리다이렉트?
// 2) 어디로 갈까? == 경로
if(forward == null) {
//forward가 null이면 메인 페이지로 보내기
try {
response.sendRedirect("/main.do");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else {
//isRedirect가 True면 실행
if(forward.isRedirect()) {
try {
response.sendRedirect(forward.getPath());
} catch (IOException e) {
e.printStackTrace();
}
}
//isRedirect가 false면 실행
else {
RequestDispatcher dispatcher=request.getRequestDispatcher(forward.getPath());
try {
dispatcher.forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
public class HandlerMapper {
private Map<String, Action> mapper;
//생성자 - HandlerMapper객체가 생성될 때 요청
public HandlerMapper() {
//HashMap으로 초기화
this.mapper = new HashMap<String, Action>();
this.mapper.put("/main.do", new MainAction());// 메인 페이지 처리
this.mapper.put("/loginPage.do", new LoginPageAction());//로그인 페이지 이동
this.mapper.put("/login.do", new LoginAction());// 로그인 처리
this.mapper.put("/joinPage.do", new JoinPageAction());//회원가입 페이지 이동
this.mapper.put("/join.do", new JoinAction());// 회원가입 처리
this.mapper.put("/logout.do", new LogoutAction());//로그아웃 처리
this.mapper.put("/boardPage.do", new BoardPageAction());//게시판 페이지 이동
this.mapper.put("/insertBoardPage.do", new InsertBoardPageAction()); //게시글 작성 페이지 이동
this.mapper.put("/updataBoardPage.do", new UpdataBoardPageAction()); //게시글 수정 페이지 이동
this.mapper.put("/reply.do", new ReplyAction());// 댓글 처리
}
//전달받은 command에 맞는 Action 객체를 반환해준다.
public Action getAction(String command) {
return this.mapper.get(command); //Action 객체 반환
}
}
728x90
'추가 공부 > Web' 카테고리의 다른 글
쉽게 배우는 HTML5 & CSS3 & JavaScript 1 (0) | 2024.08.27 |
---|---|
Cafe24 문자API Servlet 문자 인증 구현 (0) | 2024.08.23 |
카카오 API 사용해보기 2 (로그인) (0) | 2024.08.18 |
카카오 API 사용해보기 1 (로그인) (0) | 2024.08.18 |
Cafe24 문자 보내기 (jsp) (0) | 2024.08.15 |