TIL(Today I Learned)

TIL 21일차(11.11)

keepgoing 2021. 11. 11. 15:17

정적 컨텐츠 실행 순서

-> 처음 클라이언트에 요청이 오게되면 내장 톰켓을 지나간다
-> 그리고, 컨트롤러에 요청이 있는지 확인한다(있다면 출력하고 정적 컨텐츠가 있다면 무시함.)

    @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)