모든 servlet을 빈을 등록해서 필요할때만 생성하여 사용
하나의 프론트 컨트롤러로 여러 컨트롤러관리
DispathcerServlet
1) dispatcherservlet http 요청 받음
2) DispatcherServlet은 알맞는 Controller로 HTTP 요청 위임
3) 클라이언트 요청을 처리하기위해 DAO 객체 호출
4) DAO 객체에 엑세스하여 model객체를 생성하고 결과 반환
5) DispatchServlet이 처리결과에 뷰에 화면 처리 요처
6) 화면처리 및 모델객체
7) http 응답
annotation-driven: 여러가지 애노테이션을 사용할때 annotation-driven에 설정이 되어있어야된다. 활성화 시켜주는 태그
@Component로 모든걸 사용했어지만 spring에서 확장을 하여 계층마다 애노테이션 분리
@RestController: RestAPI를 위한 컨트롤러,
spring-webmvc : spring-web + spring-context
hibernate- validator: VO값의 유효성 검사, 예) not null..
웹 애플리케이션은 메인이 없기 때문에 Tomcat의 요청을 받는 시점이 시작 동작
@Service 와 @Repository 빈들을 등록
이벤트가 발생하면 클래스를생성
톰캣이 생성될때 이벤트를 받는 시점에 리스너가 실행됨
@Controller 또는 @Component 의 서블릿들을 빈으로 등록
모든 서블릿들이 DispatcherServlet 컨테이너인 appServlet을 통하고 가게 설정
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
빈 생성후에 초기화 애노테이션으로 초기화
public void init(){
codes
}
jsp 에 있는 테그 안에 있는 name="" 부부과 value object vo 의 겍체 변수명이 똑같아야함.
Representational State Transfer
http 프로토콜 매소드를 통해서 (GET, POST, PUT , DELTE) : json 또는 XML , YAML 형식으로 전송
jacjson-databind : json을 사용하기 위한 라이브러리
-----pom.xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.6</version>
</dependency>
REST API 제공하는 컨트롤러: @Controller + @Responsebody
요청된 HTTP request body를 해당 매개변수에 바인딩
반환값을 HTTP response body에 바인딩 메소드에 Content-type에 정의를 해주면, 해당 지정되있는 타입으로 변환을 해주는데 HTTP Message converter를 사용한다.
반환하는 response의 객체로 , statusCode, headers, body 3가지 속성값이 있다.
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ResponseEntity<StudentVO> readMember(@PathVariable String id) throws Exception {
StudentVO student = memberService.readMember(id);
logger.info(" /member/rest/{id} REST-API GET method called. then methodexecuted.");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
headers.set("My-Header", "MyHeaderValue");
return new ResponseEntity<StudentVO>(student, headers, HttpStatus.OK);
}
1) 자바웹 어플리케이션 패턴 3개 차이점
Model 1 : JSP만 사용해서 개발 하거나, Java Bean을 포함하여 개발 , 유지보수가 어렵고, 복잡도 높음
Model 2 : Model- View - Controller 로 분리하여 결합도 낮춤.
FrontController : 클라이언트 요청을 나누어서 실행 해당 기능별 요청별로 서브 컨트롤러로 이동하여 처리한다 이때 사용하는게 DispatcherServlet 과 Hanlder mapping
2) 프론트컨트롤러 에서 실행 패턴 절차들 쭉 설명
1. DispatcherServlet이 HTTP 요청 받음
2. DispatcherServlet은 알맞는 Controller로 HTTP 요청 위임
3. 해당 Controller 클라이언트의 요청 처리를 위해 DAO 객체 호출
4. DAO 객체는 소스를 액세스해서 Model 객체를 생성한후 요청 결과 리턴
5. DispatcherServlet 은 처리결과를 알맞는 뷰에 화면처리 요청
6. 선택된 뷰를 화면처리
7. HTTP 응답 보낸다.
3) mvc 모듈 구성 요소
4) rest컨트롤러 애노테이션 의미
@RestController = @Controller + @ResponseBody
@Controlller는 알맞는 비즈니스 로직으로 요청을 보내고 응답을 받아서, 알맞는 뷰로 처리하는 역할을 한다
이때 처리된 내용이 어떤것인지에 따라서 달라지는데, 뷰가아닌 데이터로 처리할때 JSON 형태로 보내고 싶으면 @ResponseBody 사용해서 해당 데이터들을 ResponseEntity로 감싸서 보내주면 된다.
@ResController 는 이렇게 나누어서 하는 작업을 합쳐서 더 편리하게 사용할수있다.
5) 웹어플리케이션 컨택스트 만드는과정 설명(디스패치~)
ContextLoadListner: @Service, @Repository 클래스 등록
DispatchServlet : @Controller 또는 @Component 클래스 등록
모든 컨트롤 클래스에 @Controller 설정
@RequestMapping 사용하여 URL 매핑 설정
@RequestParam HTTP요청 파라미터를 메소드의 파라미터로 전달 받을때 사용
반환은 View
annotation-driven : MVC를 사용할때 ,필요한 컴포넌트 빈 등록을 자동으로 수행, 찾은 빈과 URL 맵핑
context:component-scan: base-package 에있는 @Controller로 지정된 컨트롤러 검색해서 빈으로 등록
//Dispatcher 설정
------- servelt-context.xml--------
<annotation-driven/>
<resources mapping="경로"...>
<beans> 뷰파일ㅇ 위치
<context:component-scan base-package="controller"/>
//ContextLoadListner
---------root-context.xml------------
<context: component-scan base-packe ="service"/>
6) 매개변수 받는 방식의 차이점
1. @PathVarible : URL 경로에 있는 변ㅅ 값을 전달하여 매핑
2. @RequestParam : 요청 파라미터 값을 적용변수로 전달 파라미터 값이 기본으로 required 여서 꼭 하 나의 파라미터는 필요하다.
3. @MoldetAttribute : 요청 파라미터 값을 적용변수로 전달 폼형태로 HTTP body 보냄 객체에 바인딩
4. @RequestMapping(value={"/tryC", "/tryD"}) : 배열 형태의 값을 지정 하거나, 하나이상의 URL 사용.
7) 애노테이션들은 기본적으로 외우고
@RequestMapping :
@ModelAttribute
@PathVaariable
@RequestParam
@MatrixVariable
@RequestBody
@PreDestroy
@PostConstruct
7) rest아키텍처 관련내용 + 관련 애노테이션 설명
클라이언트와 서버 사이에 데이터 연동
웹상의 정볼르 리소스 확인해서 URL 할당해 고유 주소로 지정
HTTP 프로토콜로 리소스 접근하고, 처리 결과를 JSON 또는 XML로 전송
GET, POST , PUT, Delete
JSON을 사용하기위해, Jackson-databind 라이브러리 사용
관련애노테이션:
8) 예외처리 관련 애노테이션
컨트롤러 별로 예외 처리 : 하나의 컨트롤러 메서드에 @ExceptionHandler 지정해서 예외 처리
하나의 웹애플리케이션 단위로 공통 예외 처리: 공통되는 예외처리 클래스에 @ControllerAdvice 설정
9) 스프링 mvc적용할때 선언하는 문장 쓰게되면 mvc애노테이션 활성화 시켜주는