spring MVC 동작 흐름, jstl 주요 문법

최고고·2022년 9월 27일
0

spring MVC 기본 동작 흐름
-클라이언트 모든요청을 받는 DispatcherServlet이 요청 URL을 Handler Mapping에게 전달하고 요청에 알맞는 Controller와 Method 정보를 알아냄 -> Dispatcher Servlet이 HandlerAdapter에게 요청 처리를 위임 -> Handler Adapter는 Controller와 해당 메서드를 실행 -> Controller는 비즈니스 로직을 처리하고, 그 결과를 바탕으로 뷰(ex. JSP)에 전달할 객체를 Model 객체에 저장-> Dispatcher Servlet은 view name을 View Resolver에게 전달하여 View 객체를 얻음 -> Dispatcher Servlet은 View 객체에 화면 표시를 의뢰 -> View 객체는 해당하는 뷰(ex. JSP, Thymeleaf)를 호출하며, 뷰는 Model 객체에서 화면 표시에 필요한 객체를 가져와 화면 표시를 처리

  • Spring에서는 데이터를 전달할때 Spring 전용 저장공간인 Model이라는 Class가 존재한다. 거기에다가 저장해서 전달
  • Controller에서 jsp로 데이터를 보낼때는 객체바인딩을 통해서 전달

SpringMVC 어노테이션

@Controller스프링 mvc의 컨트롤러 객체임을 명시하는 애노테이션클래스
@requestmapping특정 uri에 매칭되는 클래스나 메소드임을 명시하는 애노테이션클래스, 메소드
@requestparam요청에서 특정한 파라미터의 값을 찾아낼 때 사용하는 애노테이션 HttpServletRequest와 같은 역할로 getParameter로 파라미터를 가져왔음파라미터
@requestheader요청에 특정 http 헤더 정보를 추출할 때 사용파라미터
@Pathvariable현재의 uri에서 원하는 정보를 추출할 때 사용하는 애노테이션, @RequestMapping에서 context 와 {값} 쓰고 메소드 파라미터부분에 바로 @Pathvariable 쓰거나 변수명 다르게 줄때는 @Pathvariable("템플릿변수명" 데이터타입 변수명)파라미터
@cookievalue현재 사용자의 쿠키가 존재하는 경우 쿠키의 이름을 이용해서 쿠키의 값을 추출파라미터
@modelattribute자동으로 해당 객체를 뷰까지 전달하도록 만드는 애노테이션메소드, 파라미터
@sessionattribute세션상에서 모델의 정보를 유지하고 싶은 경우에 사용클래스
@initbinder파라미터를 수집해서 객체로 만들 경우에 커스터마이징메소드
@responsebody리턴 타입이 http의 응답 메시지로 전송메소드, 리턴타입
@requestbody요청 문자열이 그대로 파라미터로 전달파라미터
@repositoryDao 객체클래스
@service서비스 객체클래스
  • 핸들러(Handler) : Controller 안에서 실제 요청을 처리하는 메소드
@RequestMapping에서 사용할 수 있는 속성설명
path요청 경로를 지정한다.
method요청 메소드(GET,POST,PUT,DELETE…)를 지정한다.
params요청 파라미터(유무 또는 값)을 지정한다.
headers요청 헤더(유무 또는 값)를 지정한다.
consumes요청 헤더의 Content-Type 값를 지정한다.
produces요청 헤더의 Accept 값을 지정한다.

@GetMapping, @PostMapping, @PutMapping, @DeleteMapping을 사용하면 method 속성을 생략 가능

서비스 모델의 역할

  • 컨트롤러는 매개변수를 이용해 서비스 객체 호출하는역할
  • Service 는 불필요하게 Http 통신을 위한 HttpServlet을 상속 받을 필요도 없는 순수한 자바 객체로 구성된다 (그렇기에 Service 에 request나 response와 같은 객체를 매개변수로 받아선 안된다. 그걸 사용해야하는 작업은 컨트롤러에서 해야한다.)
  • 모듈화를 통해 어디서든 재사용이 가능한 클래스파일(view단이 변경되더라도 Service는 view에 종속적인 코드가 없기때문에 그대로 재사용 할 수 있어야 한다는 뜻)
  • DAO가 DB에서 받아온 데이터를 전달받아 가공하는 것
  • DAO가 읽은 데이터에 대한 비즈니스 로직을 수행하고, 그것을 하나의(혹은 여러개의) 트랜잭션으로 묶음, 즉, Service가 트랜잭션 단위임
  • 컨트롤러에서 리다이렉트로 페이지를 넘기는 경우 : 리다이렉트시점에 원하는 데이터를 임시로 추가해서 넘기는 작업이 가능

  • 스프링과 자바 버전 바꿔줘야됨 1.6 -> 11로
    예제에 따라서 버전 바꿀 수있음 pom.xml에서 자바 버전 아래 프레임워크버전 변경
    플러그인 태그 중 maven-compiler-plugin 내용 바꿈 jdk가 11버전이므로 11로

  • 프로젝트 우클릭 메이븐 업데이트 프로젝트

  • 서버 스타트

  • 크롬 주소입력창에 localhost:포트번호/내가지정한 context path 엔터 땅 치면 헬로월드 나옴(보안폴더 - home.jsp로 연결됨)**WEB-INF 디렉토리에 뷰인 jsp : 무조건 FrontController를 거쳐 컨트롤러가붙은 POJO를 통해 jsp가 실행됨

  • 롬복 파일 받기 (getter setter 생성자 toString 메소드 등 간편하게 어노테이션으로 설정하는 라이브러리)
    https://projectlombok.org/ 에서 다운로드 후
    cmd창 - cd jdk설치경로\bin 파일
    java -jar lombok.jar
    엔터
    압축 풀어줌
    고추그림 화면이 나오면 specify location에서 이클립스가 설치된 경로 찾고, eclipse.exe 선택하고 인스톨
    pom.xml에 API 태그 추가함


web.xml 에서 인코딩필터 태그 등록

pom.xml

  • maven 안에 있는 라이브러리 사용가능
  • dependency를 통해 필요한 라이브러리 추가
  • jdbc 라이브러리

root-context.xml

  • 히카리 CP 빈 등록
  • MyBatis, DB 관련설정

servlet-context.xml

  • DispatcherServlet의 설정
    컨트롤러의 위치를 scan한다 <context:component-scan base-package="..~~" />
  • 뷰의 이름, 위치 등 뷰 리졸버 관련 설정

웹 프로젝트 3레이어

  • Presentation Layer (Web Layer) ui 담당
  • Business Layer (Service Layer) 요구사항 반영계층 기능적 요구사항구현
  • Data Access Layer (=Persistence Layer) (Model [Repository]) 데이터처리 디비 연결 (DAO - MyBatis 호출, 사용 )

MyBatis

  • SQL Mapper 라이브러리
  • 트라이캐치, 프리페어스텥먼트 리절트셋 등 코드를 줄여줌~!
  • 여러명의 사용자를 동시에 처리해야하는 데이터베이스 연결을 이용할때 커넥션 풀을 사용
  • DataSource(jdbc 커넥션처리기능 )라는 인터페이스를 통해 이를 사용하며,Hikari CP라는 커넥션 풀을 사용하기 위해서 pom.xml(mybatis-spring과 MyBatis라이브러리를 추가, 히카리cp라이브러리추가)과 root-context.xml(데이터소스추가, 히카리cp 설정) 설정
  • mybatis-spring(스프링에서 동작) - MyBatis(이 둘을 연결해줌) - DB
  • 쿼리문을 작성해줄 XML파일을 만들어줌 ---> XML파일의 위치와 XML파일에 지정하는 namespace속성이 중요 sql문 쓰는 ___.xml과 연결해주는
    인터페이스 생성 namespace와 인터페이스명같아야되고, id명과ㅏ 메소드명이같아야됨
  • 메소드 선언은 인터페이스 내에 존재하고, SQL에 대한 처리는 XML을 이용하는 방식

~~참고) utf 8 설정 윈도우-제너럴-워크스페이스에서 변경
~~


jstl 주요 문법

Core(기본) 태그 종류

  • 변수 : remove, set
  • 흐름 제어
    choose(when, otherwise)
    forEach
    forTokens
    if
  • URL 관리
    import(param)
    redirect(param)
    url(param)
  • 기타 : catch, out
    <c:set> 태그 : 변수지정시 scope생략하면 기본값이 page 서블릿 보관소(JspContext, ServletRequest, HttpSession, ServletContext)에 저장됨

조건문 문법참고자료 :
https://www.devkuma.com/docs/jsp-servlet/%EC%A1%B0%EA%B1%B4%EB%AC%B8-c-if-c-choose-c-when-c-otherwise/

0개의 댓글