핸들러 맵핑
좋은 FrontController 기반의 프레임워크들이 멤버변수로 가지게하는 것
역할 == 싱글톤 패턴 유지
[싱글톤 패턴]
싱글톤 패턴이란
new(힙메모리)를 절약하는 패턴중 하나로,
한번 new해서 존재하는 객체가 있다면
해당 객체를 계속 재사용하는 패턴
"new" 연산자는 힙 메모리영역을 사용 적게 사용할수록 좋다.
1. 싱글톤 패턴이 깨져있다.
/main.do 요청을 할때마다 new MainAction()을 수행한다.
mainAction 객체가 N개 힙 메모리에 존재한다.
2. 전체 프로젝트를 수행하는 동안
mainAction 객체가 메모리에 존재한다면,
그 객체를 재사용하도록 코딩
=> 행들러맵핑 : 싱글톤 패턴을 유지시키는 장치
핸들러맵퍼
public class HandlerMapper {
private Map<String, Action> mapper;
public HandlerMapper() {
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());
}
public Map<String, Action> getMapper() {
return mapper;
}
public void setMapper(Map<String, Action> mapper) {
this.mapper = mapper;
}
//조금 더 강화 한다면 아래와 같이 getter setter로 수정이 가능하다.
/* public Action getAction(String command) {
return this.mapper.get(command);
}*/
}
FrontController.jsp
private void doAction(HttpServletRequest request, HttpServletResponse response) {
// 1. 사용자가 무슨 요청을 했는지 추출 및 확인
String uri=request.getRequestURI();
String cp=request.getContextPath();
String command=uri.substring(cp.length());
System.out.println("command : "+command);
// 2. 요청을 수행
Action action = this.mappings.getAction(command);
ActionForward forward = action.execute(request, response);
// 3. 응답(페이지 이동 등)
// 1) 전달할 데이터가 있니? 없니? == 포워드? 리다이렉트?
// 2) 어디로 갈까? == 경로
if(forward == null) {
try {
response.sendRedirect("/main.do");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else {
if(forward.isRedirect()) {
try {
response.sendRedirect(forward.getPath());
} catch (IOException e) {
e.printStackTrace();
}
}
else {
RequestDispatcher dispatcher=request.getRequestDispatcher(forward.getPath());
try {
dispatcher.forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
728x90
'국비 내용 정리 > HTML' 카테고리의 다른 글
국비 39일차 내용 정리 (0) | 2024.08.28 |
---|---|
국비 36일차 내용 정리(비동기 처리) (0) | 2024.08.22 |
국비 34일차 내용정리(스프링 프레임워크의 구조) (0) | 2024.08.19 |
국비 33일차 내용정리(JS) (0) | 2024.08.18 |
국비 32일차 내용정리(JS, xml기초) (0) | 2024.08.15 |