Servlet - #5 HTTP Method

임다이·2023년 10월 30일
0

Jsp/Servlet

목록 보기
5/10

HTTP Method - 데이터를 전송하는 방식

Get - 리소스 조회(Read)
POST - 요청 데이터 처리 및 등록
PUT - 리소스 덮어쓰기, 없을 경우 생성
PATCH - 리소스 부분 변경
DELETE - 리소스 삭제


  • Get 방식 - 리소스 조회 메소드(Read)
    -데이터를 URL로 쿼리스트링 방식을 통해서 전달
    -전송하는 데이터의 길이에 한계(1024byte)
    -보안상의 문제가 있어서 중요한 데이터를 보낼 때는 적합하지 않음
    -? 문자부터 데이터 표현의 시작점
    -데이터는 key = value 형태로 전송
    -여러 개의 데이터를 보내고 싶을 때는 & 사용
    -GET메서드는 캐싱이 가능하기 때문에 POST방식보다 속도면에서 유리

  • POST 방식 - 요청한 데이터를 처리 및 등록
    -패킷의 Body 부분에 담아서 전송
    -전송하는 데이터의 길이의 제한이 없음
    -텍스트, 이미지 등도 전송 가능
    -GET방식 보다는 보안에 강력(그래도 열어볼 수는 있어서 중요한건 암호화해서)
    -Content-Type지정
    • application/x-www-form-urlencoded
    • multipart/form-data
    • application/json

GET방식 - 인코딩/디코딩 방법

  • Get_Encoding
    페이지의 charset을 따른다


    → 인코딩 방식이 다르다 하면 이렇게 바꿔주면 된다.
  • Get_Decoding
    server.xml 파일에 URIEncoding 속성 추가

-GET방식 인코딩 방법
form태그가 해당 페이지의 charset으로 인코딩 진행

-GET방식 디코딩 방법
server.xml파일의 63번째줄 Connector 태그에 URIEncoding="인코딩방식" 속성 추가
→ Tomcat9버전부터는 UTF-8 기본값으로 설정


POST방식 - 인코딩/디코딩 방법

  • Post_Encoding
    페이지의 charset을 따른다
  • POST_Decoding
    데이터가 담긴 request객체에 디코딩 방식 지정


-POST방식 인코딩 방법
form태그가 해당 페이지의 charset으로 인코딩
-POST방식 디코딩 방법
데이터가 담긴 request객체에 setCharacterEncoding 메소드를 사용해서 디코딩 방법


→ POST 방식
String str = request.getParameter( );
하나의 값을 가져올 때

String[ ] str = request.getParameterValues( );
하나 이상의 값을 가져올 때


실습

  • getPost.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    <h1> GET방식 </h1>
    <form action="Ex08_getPost" method="get">
        DATA : 	<input type="text" name="data">
        <input type="submit">
    </form>
    <ol>
        <li> URL에 쿼리스트링 방식으로 데이터 전송 </li>
        <li> 데이터 길이의 제한(1024byte) </li>
        <li> URL에 데이터가 노출 되기 때문에 보안의 취약 </li>
        <li> 리소스 조회(READ) </li>
        <li> 캐시(임시저장소)에 저장하기 때문에 데이터를 다시 로딩하지 않아도 되서 속도가 빠름 </li>
        <li> form태그에 method속성을 통해서 지정하는데, 따로 작성하지않아도 get방식으로 데이터 전송(기본값으로 지정되었음) </li>
    </ol>
    
    <hr>
    
    <h1> POST방식 </h1>
    <form action="Ex08_getPost" method="post">
        DATA : 	<input type="text" name="data">
        <input type="submit">
    </form>
    <ol>
        <li> 패킷(데이터블록)의 body 부분에 데이터를 담아서 전송 </li>
        <li> 데이터 길이의 제한이 없음 </li>
        <li> 직접 노출이 되지 않아 GET방식보다 보안에 강함 </li>
        <li> 데이터 처리 및 등록 </li>
        <li> method속성에 POST로 지정 </li>
        <li> 데이터의 타입을 명시(Content-Type)
            <ul>
                <li> Application/x-www-form-urlencoded(기본값)
                     -> 데이터를 key=value의 형태로 전송
                     -> 전송하는 데이터를 url encoding해서 처리 </li>
                <li> mutipart/form-data
                     -> 파일업로드와 같은 바이너리 데이터 전송 시 사용
                     -> mutipart이름처럼 다른 종류의 여러 파일을 전송 가능 </li>
                <li> application/json
                     -> text, xml, json 데이터 전송 시 사용 </li>
                <li> text/plain
                     -> txt 형태로 전송 </li>
            </ul>
        </li>
    </ol>
    
    </body>
    </html>

  • getPost.java

    
    public class Ex08_getPost extends HttpServlet {
        private static final long serialVersionUID = 1L;
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            // 0. 디코딩
            // GET방식 인코딩 방법 : form태그가 해당 페이지의 charset으로 인코딩 진행
            // GET방식 디코딩 방법 : server.xml파일의 63번째줄 Connector 태그에
            //					 URIEncoding="인코딩방식" 속성 추가
            //					 -> Tomcat9버전부터는 UTF-8 기본값으로 설정
    
            // POST방식 인코딩 방법 : form태그가 해당 페이지의 charset으로 인코딩
            // POST방식 디코딩 방법 : 데이터가 담긴 request객체에
            //					  setCharacterEncoding 메소드를 사용해서 디코딩 방법
            request.setCharacterEncoding("UTF-8");
    
            // 1. 데이터 전송 방식 확인하기
            String method = request.getMethod();
            System.out.println("방식 : " + method);
    
            // 2. 데이터 확인
            String data = request.getParameter("data");
            System.out.println("데이터 : " + data);
        }
    
    }
    


  • userInfo.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <form action="Ex09_userInfo" method="post">
            <table width="400">
                <!-- 42: tr 4, td 2개씩 -->
                <tr>
                    <th colspan="2" bgcolor="gray" height="50px" align="left"> 
                        Step1 : 아이디/비번 입력 
                    </th>
                </tr>
                <tr height="35px" bgcolor="whitesmoke">
                    <td align="right"> 아이디 </td>
                    <td> <input type="text" name="id"> </td>
                </tr>
                <tr height="35px" bgcolor="whitesmoke">
                    <td align="right"> 비밀번호 </td>
                    <td> <input type="password" name="pw"> </td>
                </tr>
                <tr height="35px" bgcolor="whitesmoke">
                    <td align="right"> 비밀번호 확인 </td>
                    <td> <input type="password" name="pwCheck"> </td>
                </tr>
    
                <tr>
                    <th colspan="2" bgcolor="gray" height="50px" align="left"> 
                        Step2 : 개인정보 
                    </th>
                </tr>
                <tr height="35px" bgcolor="whitesmoke">
                    <td align="right"> 성별 </td>
                    <td><input type="radio" name="성별" value="남자"><input type="radio" name="성별" value="여자">
                    </td>
                </tr>
                <tr height="35px" bgcolor="whitesmoke">
                    <td align="right"> 혈액형 </td>
                    <td>
                        <select name="혈액형">
                            <option value="A형"> A</option>
                            <option value="B형"> B</option>
                            <option value="O형"> O</option>
                            <option value="AB형"> AB형 </option>
                        </select>
                    </td>
                </tr>
                <tr height="35px" bgcolor="whitesmoke">
                    <td align="right"> 생일 </td>
                    <td> <input type="date" name="birthday"> </td>
                </tr>
    
                <tr>
                    <th colspan="2" bgcolor="gray" height="50px" align="left"> 
                        Step3 : 선호도
                    </th>
                </tr>
                <tr height="35px" bgcolor="whitesmoke">
                    <td align="right"> 취미 </td>
                    <td>
                        축구 <input type="checkbox" name="취미" value="축구">
                        야구 <input type="checkbox" name="취미" value="야구">
                        농구 <input type="checkbox" name="취미" value="농구">
                    </td>
                </tr>
                <tr height="35px" bgcolor="whitesmoke">
                    <td align="right"> 좋아하는 색깔 </td>
                    <td> <input type="color" name="color"> </td>
                </tr>
    
                <tr>
                    <th colspan="2" bgcolor="gray" height="50px" align="left"> 
                        Step4 : 적고 싶은 말 
                    </th>
                </tr>
                <tr>
                    <td colspan="2">
                    <textarea name="board" cols="55" rows="5"></textarea>
                    </td>
                </tr>
    
                <tr bgcolor="whitesmoke">
                    <td colspan="2" align="center">
                        <input type="submit" name="제출">
                        <input type="reset" name="초기화">
                    </td>
                </tr>
    
            </table>
    </form>
    </body>
    </html>

  • userInfo.java

    public class Ex09_userInfo extends HttpServlet {
        private static final long serialVersionUID = 1L;
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            // POST방식 디코딩(코드 -> 문자)
            request.setCharacterEncoding("UTF-8");
    
            String id = request.getParameter("id");
            String pw = request.getParameter("pw");
            String pwC = request.getParameter("pwCheck");
            String gender = request.getParameter("성별");
            String blood = request.getParameter("혈액형");
            String birth = request.getParameter("birthday");
            String[] hobby = request.getParameterValues("취미");
            String color = request.getParameter("color");
            String message = request.getParameter("board");
    
            // 웹에 출력하기
            response.setContentType("text/html; charset=utf-8");
            PrintWriter out = response.getWriter();
    
    //		out.print("<style> div{background-color:" + color + ";" 
    //		+ "width:120px; height:20px;" + "display : inline-blovk;} </style>"); -> 이렇게 해도된다.
    
            out.print("id : " + id + "<br>");
            out.print("pw : " + pw + "<br>");
            out.print("c_pw : " + pwC + "<br>");
            out.print("gender : " + gender + "<br>");
            out.print("blood : " + blood + "<br>");
            out.print("birth : " + birth + "<br>");
            out.print("hobby : ");
            for(int i=0; i<hobby.length; i++) {
                out.print(hobby[i] + " ");
            }
            out.print("<br>");
            out.print("color : " + color + "<br>");
            out.print("<div style='width:120px; height:20px; background-color:"+color+"'>");
            out.print("</div>");
            out.print("message : " + message);
        }
    
    }
    


profile
노는게 제일 좋아~!

0개의 댓글