작성
·
12
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
<form th:action="@{/items/new}" th:object="${form}" method="post">
<form role="form" action="/members/new" th:object="${memberForm}" method="post">
첫번째는 상품등록 폼의 action이 th태그로 사용된경우
두번째는 회원등폭 폼의 action이 그냥 사용된경우입니다.
상품,회원의 @getMapping createForm과 @postMapping create의 경로가 같기때문에(member/new, items/new) 저는 위의 2개의 form.html 에있는 action을 action=""으로 둘다 설정했는데 저렇게 따로 하는 이유가 있을까요 ? 제가 배운 기억으로는 경로가 같으면 action="" 이렇게 사용하면 처음 요청했던곳으로 다시 post요청한다고 알고있어서요
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. deoksam님 질문 주셔서 감사합니다!
회원 등록 폼과 상품 등록 폼에서 서로 다른 방식으로 action
을 지정하고 있어 헷갈리실 수 있습니다. 여기서 핵심은 타임리프의 th:action
과 HTML의 action
의 차이를 이해하는 것입니다.
th:action
th:action="@{/items/new}"
형태로 사용되며, 타임리프에서 경로를 정의할 때 사용되는 방식입니다.action
action="/members/new"
로 사용되며, 절대 경로를 그대로 HTML에 작성합니다.두 폼에서 똑같이 경로가 지정되어 있는 이유는 동일한 URL에 대해 다른 HTTP 메서드(POST와 GET)를 사용해 요청을 처리하기 때문입니다. 이는 Spring에서 매우 흔하게 사용되는 패턴이며, 다음과 같은 어노테이션으로 대응됩니다:
@GetMapping("/items/new")
와 @PostMapping("/items/new")
는 같은 URL 경로를 사용하지만 서로 다른 HTTP 메서드(GET과 POST)를 처리합니다.만약 폼에서 action=""
으로 두게 되면, 그냥 현재 URL로 POST 요청을 보내겠다는 의미입니다. 그러나 th:action
또는 action
을 통해 명시적으로 경로를 설정하는 이유는 명확하게 경로를 지정하여 의도치 않은 경로로의 요청을 방지하기 위해서입니다.
이 답변들이 도움이 되길 바라며, 타임리프와 HTML action의 차이를 이해하는 데 한걸음 더 다가가셨기를 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.