본문 바로가기
수업내용

20230522 수업내용🥸

by titlejjk 2023. 5. 22.

오늘 첫 수업으로 자바 스크립트에서 JSON의 배열들을 저장 버튼을 누를때 마다 테이블에 추가 되도록 프로그래밍을 하도록 하는 수업을 하겠다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Step10_example5.html</title>
</head>
<body>
    <input type="text" placeholder="번호입력..." id ="inputNum">
    <br>
    <input type="text" placeholder="이름입력..." id ="inputName">
    <br>
    <input type="text" placeholder="주소입력..." id ="inputAddr">
    <br>
    <button id = "saveBtn">저장</button>
    <button id = "deleteBtn">삭제</button>
    <table>
        <thead>
            <tr>
                <th>번호</th>
                <th>이름</th>
                <th>주소</th>
            </tr>
        </thead>
        <tbody>

        </tbody>
    </table>
    <script>
        
        //번호, 이름, 주소를 입력하고 저장 버튼을 누르면 localStroage 에 저장하고
        //삭제 버튼을 누르면 localStorage 에 저장된 정보를 삭제하고
        document.querySelector("#saveBtn").addEventListener("click", ()=>{
            //1. 입력한 내용을 읽어와서
            const num = Number(document.querySelector("#inputNum").value);
            const name = document.querySelector("#inputName").value;
            const addr = document.querySelector("#inputAddr").value;

            //2. object에 담고
            const obj = {num, name, addr };
            //3.배열에 누적 시키기
            //빈 배열을 준비하고
            let members=[];
            //만일 localStorage에 이미 저장된 정보가 있다면
            if(localStorage.members){
                //localStorage에 저장된 정보를 이용해서 배열을 만든다.
                members = JSON.parse(localStorage.members);
            }
            members.push(obj); //배열에 .push로 누적시키기
            //4.배열을 json문자열로 변환
            const json = JSON.stringify(members); //.parse로 json문자열로 변환하기
            //5.json문자열을 localStroage에 저장하기
            localStorage.members = json; //변환된 문자열을 localStroge에 저장
            //6.localStorage 에 저장된 json 문자열을 이용해서 table에 출력
            //위에 members는 테이블을 추가할때마다 업데이트 되어야한다.
            printMembers();
            
        });

        //페이지 로딩시점에 이미 저장된 회원정보가 있다면 한번 출력해 준다.
        if(localStorage.members){
            printMembers();
        }

        function printMembers(){
            //tbody 안에 있는 내용 삭제
            document.querySelector("tbody").innerText="";
            //localStorage 에 저장된 문자열을 배열로 변환
            const members = JSON.parse(localStorage.members);
            //반복문을 돌면서 tbody에 tr을 출력하기
            for(let i = 0; i <members.length; i++){
                let tmp = members[i];
                const tr=`
                    <tr>
                        <td>${tmp.num}</td>
                        <td>${tmp.name}</td>
                        <td>${tmp.addr}</td>
                    </tr>
                `;
                document.querySelector("tbody").insertAdjacentHTML("beforeend", tr);
            }
        }
        document.querySelector("#deleteBtn").addEventListener("click",()=>{
            
            delete localStorage.members;
        });

        

    </script>
</body>
</html>

서버프로그램을 run했을 때 이클립스에서는 Tomcat 서버에 index.thml 페이지가 포함된 프로젝트를 add를 시키고 Tomcat 서버를 start시킨다. 웹프로우저를 실행시키면서 요철할 경로(선택된 html이나 jsp페이지)를 전달해준다.

같은 코딩의 내용 (왼쪽)jsp,(오른쪽)Servlet
이렇게 같은개념?

/Step01Servlet/send?msg = hello 를 예로 들어

/Step01Servlet => context path

/send => request path(요청경로)

?msg=hello => GET request parameter

package test.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/send")
public class SendServlet extends HttpServlet{
	/*
	 *  service()메소드에는 2개의 객체의 참조값이 매개 변수에 전달된다.
	 *  
	 * HttpServletRequest 객체 => 요청과 관련된 작업을 처리할 때 사용한다.
	 * HttpServletResponse 객체 => 응답과 관련된 작업을 처리할 때 사용한다.
	 * 
	 */
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		//"msg" 라는 파라미터 명으로 전달되는 문자열을 읽어와서 msg라는 지역변수에
		//해당 파라미터 명으로 전달되는 정보가 없으면 null이 리턴
		String msg = req.getParameter("msg");
		//콘소창에 출력해보기
		System.out.println("msg :" + msg);
		//응답 인코딩 설정
				resp.setCharacterEncoding("utf-8");
				//응답 컨텐츠 설정
				resp.setContentType("text/html; charset=utf -8");
				//클라이언트에 문자열을 응답할 수 있는 객체의 참조값 얻어내기
				PrintWriter pw = resp.getWriter();
				pw.println("<!doctype html>");
				pw.println("<html>");
				pw.println("<head>");
				pw.println("<meta charset = 'utf-8'>");
				pw.println("<title>메세지 전송 결과 페이지</title>");
				pw.println("</head'>");
				pw.println("<body>");
				pw.println("<p >메세지 잘 받았어 </p>");
				pw.println("</body>");
				pw.close();
	}
		
	
}

form을 활용한 메세지 입력해서 받아보기

 

get과 post의 차이점을 공부

post 방식에서는 

resp.setCharacterEncoding("utf-8");

를 꼭써주어야 한다.

 

- 아래의 폼을 제출하면 요청방식은 post

<form method = "post">

</form>

 

-아래의 폼을 제출하면 요청방식은 get

<form method = "get">

</form>

 

-링크를 누르면 무조건 get 방식 요청 or 웹브라우저의 주소창을 직접작성해서 요청하는 것도 get방식 요청

 

댓글