MVC 패턴 기본구조
ㄱ. 모델 1구조
웹컨테이너 [서블릿 클래스(jasper) -> 서블릿 객체]
ex01.jsp <- 요청 브라우저
구현
응답 ->
ㄴ. 모델 2 구조(MVC 패턴)
로직 클래스[M]VC
모델(model)객체
write.htm -> write.java 클래스 서블릿x
list.htm -> List.java 클래스 서블릿 X
view.htm -> 하나의 서블릿 요청 받아요. request.setAt("list",list);
delete.htm -> [서블릿] 1개 포워딩 list.jsp
모든 요청 MV [C]컨트롤러
: 담당로직 클래스
:
view
출력 객체
화면 출력 list.jsp, write.jsp, view.jsp
게시글 목록
출력
클라이언트(웹 브라우저) 서버
주소[] [ 하나의 서블릿(컨트롤러) 역할] 클래스(자바빈)
CommandHandler
/list.htm (모델객체)
/write.htm ->요청-> 1. 모든 http 요청 ListModel.java
/edit.htm 2. 요청분석( edit.htm ):
/view.htm 게시글 수정 요청
(어떤 요청인지 파악한다.)
3. 로직 처리 담당하는 클래스(모델) 모델처리=> EditModel.java
(EditModl.java(모델)) 파악 후
담당 모델한테 처리하라고 지시한다.
4.모델이 처리한 결과를 받아서 <=처리 결과
->request/session/application
저장공간에 저장한다.
5. 화면 출력 담당뷰가 누군지 파악 하고
포워딩 또는 리다이렉트 시킴
edit.jsp
1번부터 5번까지 서블릿(컨트롤러)의 역할
:
:
edit.jsp
<=응답 [출력/화면]
**작동원리
모든 요청을 담당하는 컨트롤러
(요청이 들어오면 누가 일을 처리해야할지 고민해서 담당자(모델객체)를 결정한다 )
컨트롤러가 모델 객체한테 일을 시키는거다.
모델 객체가 로직을 수행하고 다시 컨트롤러로 보내준다
그런면 컨트롤러가 포워딩 또는 리다이렉트 할 곳을 정해서 뷰 객체로 보내준다.
(가운데서 컨트롤러가 모든걸 담당)
뷰 객체에서는 화면을 출력하기만 한다.(리스트 목록 불러오기 등등)
컨트롤러만 서블릿이다. 나머지는 클래스 파일
MVC 패턴 게시판 구현
1. days08폴더
ㄴboard 폴더 생성
2. web.xml 을 없애고 + ctrl C V + web_days07.xml
web.xml
ㄴDBCP 설정 부분만 남기고 다 지워라
3. 모든 요청 -> 단 하나의 서블릿( MV[C] 컨트롤러 )
url-pattern="/" ->
url-pattern="*.확장자"->
url-pattern="*.do" -> days08.mvc.controller.DispatcherServlet.java (이걸로 쓰자)
list.do
write.do
edit.do
view.do
???.do
4. web.xml
서블릿(컨트롤러) 등록
<load-on-startup>1</load-on-startup>
1번째 요청 -> 서블릿 객체 생성 -> 응답
요청 X 톰캣(WAS) 시작될 때 서블릿 객체 생성 바로 응답할 수 있도록 하기 위해서
(없어도 에러는 안나지만 그냥 성능 때문에 미리 요청해서 하나 만들어 놓는 것이다.)
5.DispatcherServlet에서 코딩 시작
a링크 요청 -> get()
브라우저 주소창[] 요청 -> get
6. 설정 파일 선언(추가)
요청URL => 커맨드 핸들러
요청URL => 커맨드 핸들러
WEB-INF 폴더
ㄴ commandHandler.properties 어떤요청이 들어오면 프로퍼티즈 파일에 의해 우변 항 파일이 실행되는 것이다.
7.커맨드 핸들러 implements CommandHandler 인터페이스 오버라이딩
ListHandler
WritrHandler
days08.mvc.command.CommandHandler.java 인터페이스 선언
days08.mvc.command.ListHandler
days08.mvc.command.WriteHandler
days08.mvc.command.EditHandler
8. DispatcherServlet.init() 구현
DispatcherServlet.doGet() 구현
9./board/list.do 요청 -> ListHandler.process() 구현
days05.board.List.java 코딩 복사해서 붙이기
3q번쨰 질문
String path = "/jspPro/board/list.do"
첫번째 방법
path = path.replaceAll("/jspPro","")
4번쨰 질문
<load-on-startup>1</load-on-startup> 에 의해 DispatcherServet 서블릿 객체를 생성 => init(){}
톰캣 서버 시작할떄 모든. 요청 -> ??? Handler.process() -> 포워딩
list
init(){} 역할 : .propertirs 파일 열어서 목록에 해당되는 key 값을 반복문으로 돌면서 해당되면 map에 (key value)값으로 추가해주는 역할이다.
~~Map
.propertirs 파일 열어서
목록에 해당되는게 몇개인지 파악하고 해당되는 거 만큼
Map에 추가하는 것이다.
12. 글쓰기
ㄱ. list.jsp
<a href="<%=contextPath %>/board/write.do">글쓰기</a> 글쓰기 버튼 url 수정
ㄴ. board/write.do (GET방식)
WriteHandler.java 코딩 수정
doGET() write.jsp
ㄷ. 5일차에 있는 write.jsp 를 8일차로 옮김 days08/board/write.jsp 복사 붙이기
13. list.jsp 하나의 게시글 제목을 클릭하면 상세보기 view.jsp
ㄱ.<td ><a href="<%= contextPath%>/board/view.do?seq=${dto.seq}">${ dto.title }</a></td> 수정
ㄴ. commandHandler.properties 확인
/board/view.do = days08.mvc.command.ViewHandler 추가해 주기
ViewHandler.java 핸들러가 있는지 파악 확인 -> View.java 코딩 복사 + 붙이기
ㄷ. view.jsp 복사 붙이기
14. MVC 패턴 코딩
수정하기
삭제하기
'Jsp' 카테고리의 다른 글
[JSP]JSP와 Servlet/ 동작과정__10/20 (0) | 2022.10.20 |
---|---|
[JSP]JSTL 기본__개발공부 83일차 (0) | 2022.07.11 |