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



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



-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">
<!-- 4행 2열 : 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);
}
}
