[JSP] MVC패턴2로 프로젝트 구성 (제작중)
MVC1 모델
JSP <----------> 모델
화면구현기능, 페이지 요청, 데이터요구
JSP DAO
서블릿에서 구현
컨트롤러
서블릿
서블릿
서블릿 ... << 이 생겼다
서블릿과 DAO간에 의존성이 높았다.
MVC2 모델
프론트에서 클래스를 부르는 형태이기에 변경과 유지보수면에서 빠르게 작업할 수있지만
너무 광범위해서 소규모 게시판은 MVC1 패턴이 적합하다.
모델 <-------> Controller(서블릿) <-------> View (jsp)
팩토리 클래스
▼▼
서비스 클래스를 생성
1) 요청(URL) 분석
http://localhost:8181/jspMain /페이지
/페이지 ? 쿼리 스트링
/ 매핑값 << 서블릿
/jsp_Membershop/login.do
/jsp_Membershop/logout.do
/jsp_Membershop/idcheck.do
--> 확장자 패턴
>>> 서블릿을 하나로 만들자 !(프론트)
/JSP_Membershop/*.do
어떤 요청이든 간데 .do확장자 붙어있으면 하나의 서블릿으로 와라 (대문의 역할 "front"
front에서는 구체적으로 어떤 요청인지 물어봐야 한다.
그리고 나서 요청을 분리해 내야 한다.
요청문자열 - getServletContext() >>>>>> "insert.do"
"update.do"
........
if(어떤 요청? equals("insert.do"){
insert와 관련된 서비스 클래스를 만들겠다.
해당 서비스 클래스를 실행하겠다.
}
[mvc 1 컨트롤러]
요청 >>>>>>서블릿 >>>>>>>>>
요청 >>>>>>서블릿 >>>>>>>>>
요청 >>>>>>서블릿 >>>>>>>>> DAO
요청 >>>>>>서블릿 >>>>>>>>>
요청 >>>>>>서블릿 >>>>>>>>>
[mvc 2 컨트롤러]
요청 -------------------------------> >> 서비스 클래스 <--> dao
하나의 서블릿 >> Factory >> 서비스 클래스 <--> jsp
요청 -------------------------------> >> 서비스 클래스
|
MVC 1 |
MVC 2 |
MVC |
뷰 컨트롤러 VO |
|
컨트롤러 구성 |
서블릿 + DTO |
서블릿(프론트, 커멘드) + 호출될 클래스(Factory) + 서비스 클래스의 부모클래스(인터페이스)+ 서비스 클래스 (액션 서비스)+ DB 연결 클래스(DBManager)+ DTO |
의존성 |
강함 |
약함 |
적용 대상 |
소규모 |
대규모 |
MVC1 패턴은 서블릿의 의존성이 너무 강했다. 따라서 대규모 프로젝트에서
MVC2 패턴을 사용해서 좀더 유기적으로 홈페이지를 관리할 수 있다.
먼저 서블릿은 메인 (front) 서블릿과 제어문을 통해 객체를 생성하는 Factory클래스로 나뉜다.
프론트 서블릿에서 Action의 특정 메소드를 실행해 객체를 생성해 특정객체를 excute() 실행명령어를 실행해서 특정 DB를 실행할건데
이때 특정클래스들은 서비스 클래스들에 담겨져 있다.
서비스 클래스들은 각각의 고유성을 띄고 있지만 이걸 뭉치기위해 실행메소드를 공통적으로 집어넣는다
이떄 사용되는게 인터페이스와 추상메소드이다.
이번 mvc2 프로젝트는 인터페이스를 사용해서 모든 클래스들에게 excute() 라는 메소드를 강제삽입 시킬것이다.
이렇게 되면 front에서 excute()메소드를 객체마다 다르게 실행시킬수 있다.
* 페이지 명세
프로젝트 FrontTest
WebContect
01_frontController.jsp (페이지)
com.koreait.frontTest
FrontCon.java (서블릿)
(url-pattern) : *.do /를 사용하지 않고..
*.do로 작성
WebServelt을 *.do 로 해놓으면
>> 서블릿에서 받아서 페이지마다 uri가 변경되면 그에따른 메소드들이 호출되어야하는데
페이지 이동시 if문으로 처리되는 구간을 따로 관리하는 Factory 클래스를 만듭니다.
URL자체가 자동으로 변합니다.
#페이지 명세
Project Name : JSP_Board_MVC2
-> web.xml 만들기
-> server.xml에 가서 dbcp 연동
-> jar목록 가져다 놓기
DB
table 만들기 : create Table Board();
sequence : 번호 매기기(글에 부여되는 유일값) 고유 index
#뷰
index.jsp
board 폴더
boardCheckPass.jsp
boardList.jsp
boardUpdate.jsp
boardView.jsp
checkSuccess.jsp
+boardWrite.jsp ( 프로젝트 구성중 빠진걸 확인)
css 폴더
board.css
script 폴더
board.js
#컨트롤러
1. 서블릿 컨트롤러
com.dgblog.controller.ActionFactory
-BoardServlet.java (커맨드를 만들어서 ActionFactory한테 넘긴다)
-ActionFactory.java (일반 클래스 - if문 같은 제어문을 담당한다)
2. 서비스 클래스
com.dgblog.controller.action 액션할 서비스 클래스를 만든다.
Action 인터페이스 - 추상메서드 excute();
----모든 서비스 클래스들은 반드시 Action을 implements 시키고 excute를 강제상속 시킨다.
BoardCheckPassAction
BoardCheckPassFormAction
BoardDeleteAction
BoardListAction
BoardUpdateAction
BoardUpdateFormAction
BoardViewAction
BoardWriteAction
BoardWriteFormAction
#1 index.jsp > 실행해서 server.xml의 context를 등록시킨다
#2 server.xml 에서 dbcp를 연동한다
#3 페이지 명세대로 페이지를 만든다.
+boardWrite.jsp
1) Action inteface 만들고
2) 서비스 클래스에서 add 시켜서 만든다.
#4 SQL 테이블 만들기
시퀀스 만들기(index번호 부여(일련번호))
데이터 몇개 집어넣기
#5 DTO, DAO 구조 설정
#6 util : dbcp static으로 선언
[프로젝트 만들기]
#1 index.jsp >> front (command class) 서블릿으로 보낸다.
#2 모든 url요청을 BoardServlet( front ) 에서처리한다.
#3 BoardServlet은 excute만 실행하고 url을 조건에따라 변경시켜주는 작업은 ( Factory 클래스에서 )를 한다.