📹 참고 : 인프런 [ 스프링 입문 - 김영한 ]
java/hello/hellospring/controller/HomeController.java
@Controller
public class HomeController {
@GetMapping("/") //기본 도메인
public String home(){
return "home";
}
}
resources/templates/home.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<div>
<h1>Hello Spring</h1> <p>회원 기능</p>
<p>
<a href="/members/new">회원 가입</a>
<a href="/members">회원 목록</a> </p>
</div>
</div> <!-- /container -->
</body>
</html>

java/hello/hellospring/controller/MemberController.java
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
@GetMapping("/members/new")
public String createForm(){
return "members/CreateMemberForm";
}
}
resources/templates/members/createMemberForm.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<form action="/members/new" method="post">
<div class="form-group">
<label for="name">이름</label>
<input type="text" id="name" name="name" placeholder="이름을 입력하세요">
</div>
<button type="submit">등록</button> </form>
</div> <!-- /container -->
</body>
</html>

웹 등록 화면에서 데이터를 전달 받을 폼 객체
java/hello/hellospring/controller/MemberForm.java
public class MemberForm {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
회원 컨트롤러에서 회원을 실제 등록하는 기능
java/hello/hellospring/controller/MemberController.java
@PostMapping(value = "/members/new") //input
public String create(MemberForm form) {
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/";
<input type="text" id="name" name="name" placeholder="이름을 입력하세요">
에서 입력받은 "spirng" 이라는 이름을 MemberForm 의 name 변수에 저장된다. 이후 MemberController 의 create 메소드에서 getName() 을 통해 전달받아 join 시킨다.
GET/POST 이해하기
👉 GET 방식 : 어떠한 정보를 가져와서 조회하기 위해 사용되는 방식
▪ URL에 변수를 포함시켜 요청한다.
▪ 데이터를 header를 포함하여 전송한다.
▪ URL에 데이터가 노출되어 보안에 취약하다.
▪ 캐싱이 가능하다. (캐싱: 한번 접근후, 똑같은 요청을 할 시 빠르게 접근하기 위해 레지스터에 데이터를 저장시키는것)
👉 POST 방식: 데이터를 서버로 제출하여 추가 또는 수정하기 위해서 데이터를 전송하는 방식
▪ URL에 변수에 변수를 노출하지 않고 요청을 한다.
▪ 데이터를 Body에 포함시킨다.
▪ URL에 데이터가 노출되지 않아서 기본 보안이 설정되어 있다.
▪ 전송하는데 길이 제한이 없고 캐싱이 불가능하다.
(출처 : https://lsh2016.tistory.com/95)
java/hello/hellospring/controller/MemberController.java
@GetMapping("members")
public String list(Model model){
List<Member> members=memberService.findMembers(); //회원 전체 조회
model.addAttribute("members",members); //모델로 뷰에 넘김
return "members/memberList";
}
회원 리스트 HTML
resources/templates/members/memberList.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<div>
<table>
<thead>
<tr>
<th>#</th>
<th>이름</th> </tr>
</thead>
<tbody>
<tr th:each="member : ${members}">
<td th:text="${member.id}"></td>
<td th:text="${member.name}"></td>
</tr>
</tbody>
</table>
</div>
</div> <!-- /container -->
</body>
</html>

<tr th:each="member : ${members}"> * 자바의 for-each 구분과 비슷한 thymeleaf 구문
<td th:text="${member.id}"></td> * Getter을 통해 값을 가져옴.
<td th:text="${member.name}"></td>
</tr>
지금 까지의 실습은 데이터베이스와 연결하지 않았기 때문에 서버를 재부팅하면 모든 데이터가 지워진다.
다음 장에서 스프링 데이터 엑세스를 공부하며 데이터베이스를 연결해보자!