TIL 21일차(11.11)
정적 컨텐츠 실행 순서
-> 처음 클라이언트에 요청이 오게되면 내장 톰켓을 지나간다
-> 그리고, 컨트롤러에 요청이 있는지 확인한다(있다면 출력하고 정적 컨텐츠가 있다면 무시함.)
@Controller
public class HomeController{
@GetMapping("/")
public String home() {
return "home";
}
}
-> 컨트롤러에 아무런 요청이 없다면 정적 static
.html을 출력한다.
<!DOCTYPE HTML>
<html>
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>
MVC
//createMemberForm.html file
<input type="text" id="name" name="name" placeholder="이름을 입력하세요">
-> name="name"은 key역할
//Memcontroller.java file
@PostMapping("/members/new")
public String create(MemberForm form){
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/";
}
-> client에서 전달받은 name key 값은 PostMapping으로 넘어온다.
-> 'post'는 주로 form에 값을 넣어서 서버에 전달할 때 사용.(리소스 생성)
-> 'get'은 주로 조회할 때 사용(해당 리소스 조회, 해당 문서에 대한 자세한 정보 조회)
//MemberForm.java
public class MemberForm {
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
-> MemberController.java에서
public String create(MemberForm form){
-> 선언으로 인해 MemberForm에 입력된 setName()을 통해 name값이 저장된다.
-> getName()을 통해 name 값을 꺼낼 수 있다.
@GetMapping("/members")
public String list(Model model){
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
-> model.addAttribute("members", members); //members 값들은 저장하고 반환
post/redirect/get
-> 웹에서 어떤 값을 post했을 때, redirect를 통해 get url로 이동시키지 않으면
-> 새로고침했을 때, 중복으로 값이 저장되는 상황이 발생할 수 있다.(쇼핑몰에서 중복구매 발생 가능)
-> 때문에 post/redirect/get 방식으로 이러한 문제를 해결한다.
-> (redirect의 필요성)
//memberList.html
<tr th:each="member : ${members}">
-> members list에 대한 루프를 돈다.(for each와 맥락이 비슷.)
thead, tbody
-> thead와 tbody는 데이터를 그룹으로 묶어주는것에 용이하다.
-> 그룹화의 장점은 css 및 jQuery로 이벤트를 줄 때 구분하기 편하다.
-> 제어도 편하다.
-> 의미 구조를 만들어준다
조건.
-> table 태그 자식이어야한다.
-> tbody 태그는 thead 자식이어야한다.
-> 하나의 tr태그와 td 태그가 있어야 한다.
<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>
table, td, tr 태그
-> td태그 : table data의 약자로 셀을 만드는 역할
-> tr태그 : table row의 약자로 가로줄을 만드는 역할
cmd 명령어
dir/b -> file list 출력.
프로그램 실행 종료 -> ctrl + c
폴더 만들기 -> mkdir + foldername
h2 database
-> DB 공부 및 테스트용으로 적합한 프로그램
-> 기본적으로 h2를 실행하게되면, 열리는 웹사이트는 어드민 세션을 가지고 열리기 때문에, localhost:키값으로 변경해줘야힘
-> 윈도우는 h2.bat을 실행해야함
-> shift + enter
로 실행
-> 자바에서 'LONG'은 DB에서 'BIGINT'타입
drop table if exists member CASCADE;
create table member
(
id bigint generated by default as identity,
name varchar(255),
primary key (id)
);
-> generated by default as identify: 값을 세팅하지 않았을 때, DB가 자동으로 id 값을 세팅해줌.
insert into member(name) values('kimsungsu')
-> 형식 insert into 테이블명(column_name
) values(anything
)