티스토리 뷰
void 메소드일 경우, 요청한 경로의 페이지를 자동으로 응답한다.
>> templates/test1/test1
원하는 페이지가 있다면,
리턴타입을 String으로 하고,
return " " 경로 작성
ViewResolver가 return 앞에는 경로 뒤에는 확장자를 붙여줌.
templates + " " + .html
페이지이동(GET) / 연산(POST)
동일한 경로일지라도 어떻게 요청하느냐에 따라서 다른 작업이 들어가야 한다.
경로 > /join
GET > join페이지 이동
POST > 회원가입 DB insert
원래 value안에다가 써야하지만 하나만 쓸 때는 생략가능
경로는 동일하게 /ex02이지만 무슨 방식으로 전송했는지에 따라서 실행되는 메소드가 다름. 보통, get : 페이지 이동 post : DB CRUD |
request.getParameter를 쓰지 않아도 spring에서는 자동으로 매핑이 된다 Get방식이니까 쿼리스트링으로 name 전달 localhost:10002/ex/ex04?name=바나나 |
|
필드명과 매핑된다. 필드명과 다를 경우, @RequestParam을 넣어서 id가 들어오면 name에 들어간다. //참고 @RequestParam("name") String updated_name 필드명을 바꿀 수 없으니까~~ 한글깨짐도 없고, 형변환도 자동으로 된다. |
html에서는 연산이 불가능 >> Thymeleaf 사용
html 상단에 추가하기
<html lang="en" xmlns:th="http://www.thymeleaf.org">
컨트롤러에서 받은 객체에서 앞글자 소문자로 바뀐게 자동으로 화면으로 날아감.
타입의 앞글자가 소문자로 바뀐 key값으로 쓸 수 있다.
Controller | ||
ex06.html | 태그의 속성처럼 타임리프 사용 | |
필드명만 써도 getter를 호출해준다. | ||
부모에 접근해서 필드를 갖고 와라 부모는 ${} 필드는 *{} |
//Domain.vo
@Component
@Data
public class MemberVO {
private String name;
private int age;
}
//Controller
@GetMapping("ex07")
public void ex07(String gender, MemberVO memberVO){
log.info("ex07.................");
log.info("memberVO : " + memberVO);
log.info("gender : " + gender);
}
@GetMapping("ex07")
public void ex07(MemberVO memberVO, String gender){
log.info("ex07.................");
log.info("memberVO : " + memberVO);
log.info("gender : " + gender);
}
//순서에 상관없이 값이 잘 들어간다.
@GetMapping("ex07")
public void ex07(@ModelAttribute("gender") String gender, MemberVO memberVO){
log.info("ex07.................");
log.info("memberVO : " + memberVO);
log.info("gender : " + gender);
}
//원래 방식
@GetMapping("ex07")
public void ex07(String gender, MemberVO memberVO, Model model){
log.info("ex07.................");
log.info("memberVO : " + memberVO);
log.info("gender : " + gender);
model.addAttribute("gender", gender);
}
모델이라는 데이터 전달자 안에 request객체가 있다.
데이터 전송역할만 해주는 게 Model
개념상으로는 request가 더 큰 개념이다. request는 세션 가져오기, 캐릭터인코딩 설정 가능 등 할 수 있는 게 많음.
request를 축소했지만, scope영역은 Model이 관리하게 됨.
2개 이상부터는 @(어노테이션)사용하지 말고, Model객체 쓰는 것이 가독성에 좋다.
localhost:1002/ex/ex07?name=바나나&age=20&gender=여성
//ex07.html
<tr th:object="${memberVO}">
<td th:text="*{name}"></td>
<td th:text="*{age}"></td>
<td th:text="${gender}"></td>
</tr>
'2022 > spring boot' 카테고리의 다른 글
day02[Proxy(프록시)] (0) | 2022.11.03 |
---|---|
day02[spring MVC 실습] (0) | 2022.11.02 |
day02[oracle cloud] (0) | 2022.11.02 |
day01[IntelliJ] (0) | 2022.11.01 |
day01[framework, spring boot] (0) | 2022.11.01 |