기본동작방식 이해
스프링은 서블릿으로 만들어져 있다
서블릿 => 자바에서 map을 할 수 있는 기술
특정 요청을 할려면 동작 .java 파일(서블릿)을 요청(호출)해야한다
- 요청의 종류가 3개면 3개의 java파일이 필요하다
- 하나의 java파일에서 모든 요청을 받는 FrontController 사용
- 너무 많은 요청이 한곳으로 모이는것을 방지하기 위한 도메인(범주,분야) 별로 분기
- 분기는 Dispatcher(ServeletDispatcher,RequestDispatcher)가 해준다
ex) 로그인,회원가입 -> usercontroller.java // 글쓰기,글삭제,글 수정 -> BoardController.java 이런식으로
dispatcher = 컨트롤러의 컨트롤러
스프링에서는 컨트롤러만 만들어주면 되고 나머지는 이미 만들어져 있다
Controller-http 4가지 요청 방식
클라이언트 <--> 웹서버 <--> DB
클라->웹 : 요청방식 + http://IP/EndPoint
EndPoint : ex)user/ssar -> get요청에 이런 url 이면 user의 ssar에 대한 정보를 달라는 것
웹 서버 -> DB : GET(=SELECT),POST(=CREATE),PUT(=UPDATE),DELETE(삭제)
웹 서버 -> 클라이언트 : 파일 OR 데이터
POST,PUT : HTTP body 필요
@Controlloer, @RestController : (.html파일 응답, Data응답)
-> 클래스 위에 적어주면 스프링이 컴포넌트 스캔할때 컨트롤러로 인식한다
@GetMapping("/get") -> http://localhost::8080/get , /get이 엔드포인트, get만 브라우에서 가능(CORS)정책
--라이브러리--
spring starter web -> @요청Mapping 사용가능
spring dev tool -> 파일 변경하면 자동으로 리로드
쿼리스트링, 주소 변수 매핑
- 구체적인 데이터 요청시에 쿼리스트링이나 주소변수 매핑이 필요하다
- 스프링부트에서는 주소변수매핑을 주로 사용한다
- 쿼리스트링 : http://localhost:8080/chicken?type=양념
- 주소변수매핑 : http://localhost:8080/chicken/양념
@GetMapping("/chicken")
public String chickenQuery(String type) {
return type+" 배달갑니다. (쿼리스트링)";
}
@GetMapping("/chicken/{type}")
public String chickenPath(@PathVariable String type) {
return type+" 배달갑니다. (주소변수매핑)";
}
스프링에서는 주소변수매핑을 사용한다
http body 데이터 전송하기
http header의 Content-Type이해
body에 데이터를 담아 줄때 어떤 종류의 데이터인지 알려줘야 하기 때문에 header에 어떤 종류의 데이터인지 명시한다
header안에는 다양한 원소가 있는데 특히 Content-Type은 웹에서의 프로토콜이기 때문에 필수적이다
%body는 post, put일때만 필요하다%
springboot는 기본적으로 3가지 타입을 파싱(분석)한다
x-www-form-urlencoded : key=value
text/plain : hi
aplication/json : {"username" : "cos"}
내가 위3개중에 어떤식으로 body를 날릴건지 Content-Type에 알려줘야 spring에서 이해를 한다
json은 다른 타입과 달리 값을 바로 쓰긴 위해선 몇가지 추가 작업이 필요하다
domain(package)만들고 User.java생성, 우클릭, source -> getter,setter생성
다시 컨트롤러 와서 @requestbody String data -> @requestbody User user // user.getname(); 이렇게 사용
http 요청을 json으로 응답하기
@RestController에서는 MessageConverter가 동작한다
json을 resp할려면 너무 복잡하기 때문에 자바객체를 사용해서 리턴한다
이때 springboot에서는 MessageConverter가 있기 때문에 자바객체가 json으로 자동 변환된다
Controller-HTML 응답
1 .txt파일 응답하기 (기본경로는 resources/static)
2. 스프링부트가 지원하는 .mustache 파일 응답하기
3. 스프링 부트가 버린 .jsp파일 응답하기
.jsp와 .mustache파일은 템플릿 엔진을 가지고 있다
템플릿 엔진이란 html 파일에 java 코드를 쓸수 잇는것이다
클라이언트가 .jsp파일을 요청하면 웹서버(아파치)는 톰캣한테 위임한다
톰캣은 .jsp파일 안에 있는 자바 코드를 해석해서 .html파일로 변환한다
웹서버는 변환된 .html파일을 클라이언트한테 리턴한다
부트는 .mustache를 지원하고 .jsp를 사용안하지만 대부분의 기업은 아직 .jsp를 사용한다
일반 정적 파일(txt)들은 resources/static 폴더 내부가 디폴트 경로이다.
->확장자 입력하면 static에서 찾는다
templates 폴더안에 .mustache을 나두면 확장자 없이 파일명만 적으면 자동으로 찾아감.
->mustache라이브러리 등록한경우 확장자 없이 파일명만 적으면 자동으로 name.mustache 찾는다
.jsp는 부트가 지원 안하기때문에 aplication.yml을 이용해서 ViewResolver설정을 따로 해야한다
jsp 엔진 사용 : src/main/webapp 폴더가 디폴트 경로!!
ViewResolver가 /WEB-INF/views/c.jsp prefix,sufix를 자동으로 설정해준다
jsp랑 mustache 2개를 동시에 사용 할 수 없다
데이터를 리턴하는 RestController는 MessageConverter
파일을 리턴하는 Controller는 ViewResolver
JSP파일에 JAVA코드 사용하기
템플릿 엔진을 사용하는 이유는 JAVA코드를 사용하기 위해서다 -> 동적인 응답이 가능
서블릿은 java 안에 html을 넣기 때문에 관리하기 힘들다
@GetMapping("/jsp/java/model")
public String jspToJavaToModel(Model model) { // 함수의 파라메터에 Model을 선언하고
User user = new User();
user.setUsername("ssar");
model.addAttribute("username", user.getUsername()); // addAttribute 함수로 전달만 하면 됨.
return "e";
model을 사용해서 .jsp에 자바객체(데이터)를 전달 할 수 있다
http 요청 재 분배 하기 -redirection
http 상태코드 300번대
응답을 다른페이지로 보낸다
약속된 키워드 -> redirect:/
간단 정리
'SpringBoot > Photogram(Meta)' 카테고리의 다른 글
ch3-3. SpringBoot-로그인 (0) | 2024.04.09 |
---|---|
ch3-2 SpringBoot-회원가입 + a (0) | 2024.03.11 |
ch3. springboot-회원가입 (0) | 2024.03.04 |
1-환경설정 (0) | 2024.02.14 |