
예시) @GetMapping_name(), value(), path() : 주소 매핑

ㄴ 주소 매핑하는 역할 3개다 똑같음
ㄴ 디폴트 : 요청 데이터?
ㄴ value는 생략가능하기 때문에

ㄴ 이렇게 사용 가능
예시) @GetMapping_headers(), consumes(), produces() : 전부 헤더에 관한 내용

ㄴ 전부 헤더에 관한 내용

ㄴ 응답헤더 추가
예시) @RequestMapping_method() : 요청매핑 정

ㄴ 상세하게 요청을 받고 싶은경우?
ㄴ 겟방식인 경우 겟만 받을 수 있는데 난 딜리트도 받고 싶어 그런경우...


ㄴ 이 요청메서드는 겟과 포스트 방식에만 매칭이 된다
ㄴ 설정을 안하면 모든 요청메소드에 매칭
예시) 겟, 포스트일때 값이 넘어오는지 쳌





예시) 커맨드 객체 = 리퀘스트조인


ㄴ setter에 있는 이름과 양식에 name이 매칭
ㄴ 이름과 값 형태


ㄴ 보통 이동은 로케이션 헤더를 통해 이동

ㄴ 샌드 리다이렉트처럼 이동하게끔 하는 역할

ㄴ 이거 반복됨

ㄴ 리쿼스트매핑엔 모든 요청이 유입되니 공통적인거 넣어주기
예시) path : 요청 매핑 , params : 요청데이터를 한정해서 매핑 = 어떠한 요청데이터가 들어와야 유입이됨


ㄴ 파람스 : 요청데이터 한정
ㄴ 이 방식으로 들어온 요청만 이 메서드로 유입되게끔...?


ㄴ 같은 /join이지만 패스의 경우 파람즈(요청데이터의 제한)값이 요청데이터에 추가로 있어야 유입됨
ㄴ 밸루의 경우 그냥 유입됨

참고) 로거 사용
private final Logger log = LoggerFactory.getLogger(MemberController.class); // 로그를 연동한 코드
- log.fatal(...)
- log.error(...)
- log.warn(...)
- log.info(...)
- log.debug(...)
- log.trace(...)
- 로거 레벨별로 메서드가 있다
예시) 로거

예시) MockMvc : 컨트롤러 테스트


ㄴ 2번째 방식 : 특정 컨트롤러 한정해서 테스트

ㄴ 의존성 추가해줌
ㄴ 왜 매개변수가 AnnotationConfigWebApplicationContext 가 아니지?
ㄴ 이거말고 다른 설정쓸수 있으니 다 허용해주려구(다형성)

ㄴ 이제 목mvc 사용가능
ㄴ 향후에는 이렇게 설정 안해도 알아서 해주는거 있다고...

ㄴ 매개변수로 요청메서드가 들어간다



예시) headers : 요청쪽 헤더 데이터 한정



ㄴ 헤더를 안넣었더니 유입이 안된 모습

ㄴ 헤더에 정보 추가

ㄴ 이번엔 유입된 모습
예시) consumes : 요청헤더 쪽 Content-Type 체크

ㄴ 요청 쪽 콘텐트타입이 application/json형태로 들어와야만 유입되도록 한정함


ㄴ 요청쪽에 콘텐트타입 설정 안했더니 오류 뜸

ㄴ 콘텐트타입 설정함

ㄴ 이번엔 유입됨
예시) consumes_미디어타입 이넘상수

ㄴ 콘텐트타입 직접 설정하기 보단 오타방지 위해 스프링에서 제공하는(정의되어 있는) 미디어타입 이넘상수형태를 활용하자

ㄴ 스프링에서 제공하는 미디어 타입 이넘상수형태를 활용하자

주소의 출력 데이터로 버퍼를 치환
RequestDispatcher
forward
예시) redirect : 페이지 이동
반환값 : redirect:주소 -> Location헤더에 주소 추가 -> 응답헤더 302

ㄴ 같은 이름의 setter가 있으면 알아서 주입해준다...?
ㄴ 커맨드 객체

ㄴ 응답헤더 에서 중요한 정보 : 바디의 타입, 브라우저의 동작로케이션 헤더가 있으면 브라우저가 이동 등등 -> 브라우저에게 무슨 행동하라고 알려줌
ㄴ 이게 페이지 이동 정석이긴 하지만 이렇게는 근데 길지 않니
ㄴ 스프링에선 리다이렉트 키워드만 넣어도 위와 같은 기능을 알아서 내부적으로 해준다

ㄴ 리다이렉트 url사용 = 이렇게 해도 로케이션 헤더 추가해줌

ㄴ /가 있으면 절대경로 = url주소(로케이션헤더추가)
ㄴ /가 없으면 상대경로 = 뷰의 경로

ㄴ 응답코드 302(페이지가 이동했다를 의미)
예시) forward : 버퍼치환


ㄴ 로그인페이지 뷰가 보이긴 하지만
ㄴ 응답코드는 302로 바뀌지 않음(찐 페이지 이동이 아님)
예시)
import org.springframework.web.bind.annotation.*;
@RestController
public class ExampleController {
@GetMapping("/greet")
public String greet(@RequestParam(name = "name", required = false, defaultValue = "Guest") String name) {
return "Hello, " + name + "!";
}
}
/greet?name=John → 응답: "Hello, John!"
/greet → 응답: "Hello, Guest!"
ㄴ @RequestParam은 name이라는 쿼리 매개변수를 greet 메서드의 파라미터로 바인딩
ㄴ 만약 name 매개변수가 요청에 포함되지 않으면, 기본값으로 "Guest"를 사용
예시) 폼 데이터 처리
import org.springframework.web.bind.annotation.*;
@RestController
public class FormController {
@PostMapping("/submitForm")
public String submitForm(@RequestParam String username, @RequestParam String password) {
// 로직 처리
return "Form submitted with username: " + username;
}
}
ㄴ submitForm 메서드는 POST 요청의 폼 데이터에서 username과 password 값을 추출하여 처리
예시) 필수 매개변수
@GetMapping("/search")
public String search(@RequestParam(name = "query") String query) {
return "Search results for: " + query;
}
ㄴ query 매개변수가 필수이며, 요청에 포함되지 않으면 400 Bad Request 응답이 반환
예시) 커맨드 객체 , EL 속성, 뷰_로그인 실패 후 다시 로그인페이지 이동 시 기존 데이터 유지


ㄴ 요청데이터가 커맨드객체에 담겨있는 모습

ㄴ 커맨드객체를 서비스나 밸리데이터말고도 뷰에서도 사용함
ㄴ 뷰에서 사용 많이 하니가 알아서 el속성으로 자동 추가해줌
ㄴ el식에서는 파람을 통해 커맨드 객체 접근 가능

ㄴ 이런식으로 사용 많이 함
ㄴ 로그인 할 때 실패 했지만 아이디 비번 입력했던거 날라가면 다시 입력해야하니 짜증나니까
ㄴ 로그인 실패해도 실패한 로그인 아이디 비번 남겨두기용으로 만힝 활용

ㄴ 근데 이렇게 활용많이 하는거 알아서 스프링이 커스텀 태그 지원해줌

ㄴ @ModelAttribute 사용하면

ㄴ 이과정 내부적으로 해주고 있음

ㄴ 아무 값도 입력하지 않은 때 null로 되어 있음

ㄴ 속성명 바꾸기
ㄴ 원래 속성명은 requestJoin
예시) 회원가입 로그인 상관없이 나오는 공통 데이터

ㄴ 로그인.jsp, 조인.jsp 모두 적용 가능




-<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
예시) 커스텀 태그_<form:form>, <form:input>, <form:password>





ㄴ @ModelAttribute 사용하면

ㄴ 이과정 내부적으로 해주고 있음

ㄴ 아무 값도 입력하지 않은 때 null로 되어 있음
예시) 커스텀태그_<form:checkboxes> + 속성값이 List 자료형






컨트롤러 구성을 할 필요 없는 간단한 페이지 구성 시 사용
Spring6/
예시) 컨트롤러 없이 메인페이지(뷰) 연동하기

ㄴ 뷰만 추가(컨트롤러 없음)

ㄴ MvcConfig(설정클래스) 에서 메서드 오버라이딩


ㄴ 컨트롤러 없이 연동됨
예시) 컨트롤러 없이 마이페이지(뷰) 연동하기



예시) 레코드 클래스


ㄴ 데이터 클래스, 값만 담을 수 있는 클래스
ㄴ vo
ㄴ 보통 값이 바뀌지 않는 데이터(어짜피 상수로 되어 있음)
ㄴ 그래서 조회하는 메서드만 있음
ㄴ 커맨드 객체로 사용가능함
ㄴ @Getter❌

ㄴ 값은 생성자를 통해서 객체가 생성될때 넣어진다


예시)





<form:form><form> 태그를 위한 커스텀 태그<form:input>, <form:password>, <form:hidden><input> 관련 커스텀 태그 <form:select>, <form:options>, <form:option><select> 관련 커스텀 태그 예시) <form:select>


예시)



예시) <form:option>

예시) <form:option>




예시) <form:option>


<form:checkboxes>, <form:checkbox><form:radiobuttons>, <form:radiobutton>예시) form:radiobuttons


예시)


예시)


<form:textarea><textarea〉 태그를 위한 커스텀 태그 :