JSP&Servlet

[JSP]11. FrontController 패턴

CodeJaram 2023. 7. 10. 09:08

JSP_11_FrontController 패턴

 

[FrontController 패턴] 

  1. 필요한 이유
  • 파일마다 중복되는 코드 예)한글 인코딩, 세션 객체 선언
  • 기능마다 파일이 만들어서 개발이 복잡함
  • Servlet의 용량이  크고, 같은 기능의 반복으로 효율성 저하

→클라이언트의 다양한 요청을 한 곳으로 집중시켜 개발 및 유지보수의 효율성 극대화

 

 

 

 

[실습]

  1. FrontController 만들기: init, service 메소드 체크

init: 처음으로 실행되는 메소드, 초기화 메소드

 

2. controller로 연결하는 부분에서 파일경로에 .do 추가하기

  • main에서 controller 경로  뒤에 .do 추가하기

 

 

 

 

  • update에서  controller 경로  뒤에 .do 추가하기

 

 

  • ShowMember에서  controller 경로  뒤에 .do 추가하기

 

 

  • BoardWrite에서  controller 경로  뒤에 .do 추가하기

 

 

3. [Command] 인터페이스 만들기

-인터페이스를 상속받은 클래스들이 같은 메소드를 반드시 구현하게 하기

 

 

4. 모든 controller servlet 파일→class 파일로 변환하기

-class만들 때 interface(Command) 추가하여 상속받기

 

 

-controller에 있던 코드 복사하여 붙여넣기

-post 방식, 페이지 이동 코드 지우고 페이지 이동경로 return하기

 

5. web.xml 파일에서 URL mapping 값 *.do로 바꾸기

 

 

6. [FrontController]에서 요청받고 응답하기

<service> 메소드

  • 어떤 요청이 들어왔는지 확인: request.getRequestURI()

 

  • 주소에서 ContextPath 값 잘라내기: / maven_MessageSystem_board

-ContextPath 값 가져오기

 

- substring 메소드 사용하여 요청 값만 출력하기

 

 

(전체 주소값)

 

(ContextPath 값)

(substring으로 잘라낸 요청값)

 

<init> 메소드:  HashMap으로 controller 클래스 가져오기

  • HashMap: key, value 형태로 데이터 보관하는 구조
  • HashMap 생성하기: HashMap<String, Command>

-key(String 요청값), value(클래스)

ex)"logincon.do", new logincon()

-controller들은 서로 다른 객체를 가지고 있으므로 하나로 묶을 수 있는 객체 필요

→controller들을 상속하는 Command interface 작성

  • HashMap에 값 넣기: list.put(key, value)

 

 

<service> 메소드

  • HashMap에 저장된 class 불러오기

  • class에 있는 excute 메소드 호출하기

  • 페이지 이동

-[JoinController]만 forward 방식으로 이동하도록 [JoinController]에서 주소값에 “forward” 추가

 

①[JoinController]은 forward 방식으로 페이지 이동: request.getRequestDispatcher 객체

②나머지 Con은 sendRedirect 방식으로 페이지 이동: 

response.sendRedirect 객체

 

[오류]

개인정보 수정 시 오류→HashMap의 key값에 .do가 빠져서 실행 안됨

java.lang.NullPointerException: Cannot invoke "com.smhrd.command.Command.excute(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)" because "con" is null

 

 

'JSP&Servlet' 카테고리의 다른 글

[JSP]10. 게시판 기능  (0) 2023.07.09
[JSP]9. 회원정보 관리  (0) 2023.07.06
[JSP]8. lombok  (0) 2023.06.30
[JSP]7. Mybatis 로 JDBC 구현하기  (0) 2023.06.29
[JSP]6. Maven&Mybatis  (0) 2023.06.28