[Spring] mvc model1
MVC model1 기법
우리가 만든 파일은 classes파일로 간다. src에 만들어지는건 bin이라는 폴더에 만들어지는데 bin에 들어가면 안되고 모든 파일은 classes파일에서 찾도록 설정되어 있다. 그래서 build path에서 설정을 classes로 바꿔줘야 한다.
bin이란 디렉토리는 보이진 않음. 확장자가 클래스인건 다 컴파일 된 후에 만들어지기 때문.
이부분 설정이 아주 중요하다.
이렇게 바꿔야 찾을때 classes 폴더에서 찾게 된다. 수동으로 만들 떄 이렇게 하지 자동으로 할 땐 다 되어있다.
Model1은 Model과 View로 만 이뤄져있다.
model1에서 자바로 만들어진 부분을 서블릿이라 헀다. 서블릿 특징?
web.xml에 설정할 떄 서블릿 이름이 3개나 존재한다.
<servlet>
<servlet-name>HelloServlet</servlet-name>
<!-- 여긴 일반적으로 클래스 이름 넣어줌-->
<servlet-class>kr.web.controller.HelloServlet</servlet-class>
<!-- 이건 진짜 서블릿 이름 -->
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hs.do</url-pattern>
<!-- 이건 url상의 서블릿 이름 -->
</servlet-mapping>
url상의 이름(/hs.do), 진짜 서블릿 이름(경로). 매핑시 서블릿 이름(HelloServlet)
일단 서블릿이 매핑되는걸 중요하게 보고 가자.
서블릿을 어떻게 매핑 시키는 지 잘 알아두자.
dynamic web project 로 만들면
자바 경로가 build/classes로 바로 들어간다.
이전에 web-inf에 classes 만들고 거기 넣었는데 이클립스는 클래스 폴더를 build라는 폴더로 빼서 관리하기 위해 뺀거 뿐이지 실제로는 web-inf 아래에 classes로 위치되서 관리 되는거.
context-root 설정이 바로 있는데 여기가 더 중요. 톰캣이 바로 관리하기 위해 컨텍스트 루트가 필요한데 이걸 바로 설정해준다.
그리고 context directory 는 webapp와 같은거라 보면 된다.
<!-- 여기에 등록해야 찾아감 -->
<Context docBase="D:\egovFrame_workspace\narp\WEB\webapp" path="/web" ></Context>
<!-- 중요한 부분 우리가 만든 웹 어플리케이션을 톰캣이 인식하도록 등록하는데 이걸 컨텍스트 등록이라 한다 .안하면 톰캣이 인식 불가. -->
<Context docBase="MVC01" path="/MVC01" reloadable="true" source="org.eclipse.jst.jee.server:MVC01"/>
프로젝트 생성후 톰켓에 넣고 실행하면 자동으로 context-path가 등록이 된다.
실행 중
Caused by: java.lang.IllegalArgumentException: 이름이 [HelloServlet]과 [kr.web.controller.HelloServlet]인 두 서블릿들 모두 url-pattern [/hs.do]에 매핑되어 있는데, 이는 허용되지 않습니다.
이런 오류가 떴는데 이건
web.xml에도 hs.do로 매핑하고 servlet에도 hs.do로 매핑해서 충돌나서 톰캣이 실행이 되지 않았다 개고생했네 괜히.
둘 중 하나를 지우고 해야한다.
그리고 dynamic web project에선 서블릿을 사용해서 이렇게 매핑이 가능하며 이렇게 매핑할 시 web.xml에 수동으로 등록할 필요가 없다.
중요한건 클라이언트가 서버에 요청했을 때 클라이언트 요청을 처리하기 위해 리퀘스트 객체와 리스폰 객체를 만들어서 서비스 메서드에 첫번쨰,두번쨰 인자에 넘겨주고 실행.
이 서비스 메서드가 요청 응답 하면 식별해야됨. 이게 핵심 포인트
서비스 메서드는 첫 인자가 리퀘스트 들어와야 되고 두번쨰가 리스폰스 들어와야 한다.
이게 중요한 점.
Get방식의 특징
- URL에 변수[데이터]를 저장해서 요청한다.
- 데이터를 헤더에 포함해 전송한다.
- URL에 데이터가 노출되어 보안에 취약하다.
- 캐싱할 수 있다.
POST 방식의 특징
- URL에 변수[데이터]를 노출하지 않고 요청한다.
- 데이터를 BODY에 포함시킨다.
- URL에 데이터가 노출되지 않아서 기본 보안은 되어있다.
- 캐싱할 수 없다.
컨트롤러 역할
클라이언트 요청 받는 역할도 하고 응답해야 되서 뷰 역할도 해야한다.
그래서 서블릿에서 뷰 역할은 밖으로 빠지게 된다.
Redirect 기법
요청이 들어오면 해당 컨트롤러에 그 요청을 넘겨준다.(공무원이 전화 넘기는거 처럼)
###JSP 적 태그 요소
<% %> 스크립트적 요소 = 프로그래밍적 요소 <%@page %> page지시자 <%@include %> include지시자 <%@taglib %> taglib지시자
<% %> 스크립트릿 <%= %> 출력식
JSP는 서블릿이다.
jsp 가 서블릿이 되고 그 서블릿이 class파일이 된다.
그럼 JSP 가 어떻게 서블릿으로 변환 되나(WAS가 하는 일)
그리고 JSP는 html이 없어도 사용 가능. 안에 컨트롤러에 있던 내용을 넣어주고 해당 조건이 맞으면 다른 jsp를 호출해서 html이 없이 jsp만으로도 사용이 가능
Model 2
컨트롤러 = servlet 뷰 = JSP 모델 = 자바 객체
Model2 방식이 MVC 방식이다.