JSP Servlet 데이터 전송 방식 Get, Post
1. 데이터 전송 방식 : 데이터 전송 방식을 지정하는 method 속성 이용
- Get : 데이터 조회 요청 (default)
- Post : 데이터 생성 요청
- Put : 데이터 수정 요청
- Delete : 데이터 삭제 요청
2. GET 방식
- URL에 데이터를 포함시켜 요청
- 데이터를 패킷의 Header에 포함하여 전송
- 전송하는 데이터 길이에 한계 존재 (브라우저에서 제한, 약 255자)
- 보안에 취약
- 캐싱 가능
- Tomcat 7.0버전 이하일 경우 get 방식 한글 인코딩
3. Post 방식
- URL에 데이터를 노출하지 않고 요청
- 데이터를 패킷의 Body에 담아서 전송
- 전송하는 데이터의 길이에 제한 없음
- 보안에 강함
- 캐싱 불가능
- Post 방식 한글 인코딩 : request.setCharacterEncoding("UTF-8");
※ 인코딩 방법
- request.setCharacterEncoding("UTF-8");
클라이언트가 전송한 요청 데이터 인코딩 방식 지정 - response.setContentType("text/html;charset=UTF-8");
클라이언트가 응답할 페이지 환경설정
브라우저마다 문자 해석 방식이 다르기 때문에 인코딩 방식 지정
▶ 예제
이름을 입력 받아 post방식으로 전송 후 출력
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="GetPost", method="post">
이름 : <input type="text" name="name">
<input type="submit" value="전송">
</form>
</body>
</html>
package Servlet0127;
import java.io.IOException;
import java.io.PrintWriter;
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("/GetPost")
public class Ex02GetPost extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// post방식일 때 요청 데이터 한글 인코딩 잡아주기
request.setCharacterEncoding("UTF-8");
// --> 요청받은 데이터를 꺼내오기 전에 인코딩을 잡아줄 것
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
out.print(name);
}
}
▶ 예제
아래와 같은 모양의 페이지를 만들기
직업, 성별, 취미를 출력해보기
※ request.getParameterValues("") : 하나의 name에 value값이 여러가지인 데이터일 때 이용하며 return으로 배열을 받음
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="UserInfo" method="post">
<h3>직업</h3>
<select name="job">
<option>학생</option>
<option>회사원</option>
<option>자영업</option>
</select>
<h3>성별</h3>
<input type="radio" name="gender" value="남자">남자
<input type="radio" name="gender" value="여자">여자
<h3>취미</h3>
<input type="checkbox" name="hobby" value="축구">축구
<input type="checkbox" name="hobby" value="야구">야구
<input type="checkbox" name="hobby" value="농구">농구
<br>
<br>
<input type="submit">
</form>
</body>
</html>
package Servlet0127;
import java.io.IOException;
import java.io.PrintWriter;
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("/UserInfo")
public class Ex03UserInfo extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 한글 인코딩, 출력 스트림
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
// 데이터 불러오기
String job = request.getParameter("job");
String gender = request.getParameter("gender");
String[] hobby = request.getParameterValues("hobby");
// 데이터 출력
out.print("직업 : "+job+"<br>");
out.print("성별 : "+gender+"<br>");
out.print("취미 : ");
for (int i = 0; i<hobby.length; i++) {
out.print(hobby[i]+" ");
}
}
}
▶ 예제
데이터 전송 방식을 Post로 회원가입 테이블 만들어보기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="Join" method="post">
<table width="400px">
<!-- Step 1 : 아이디/비번 입력 -->
<tr height="50px" bgcolor="gray">
<th colspan="2">Step 1 : 아이디/비번 입력</th>
</tr>
<tr height="35px" bgcolor="whitesmoke">
<td align="left">아이디</td>
<td><input type="text" name="id"></td>
</tr>
<tr height="35px" bgcolor="whitesmoke">
<td align="left">비밀번호</td>
<td><input type="password" name="pw"></td>
</tr>
<tr height="35px" bgcolor="whitesmoke">
<td align="left">비밀번호 확인</td>
<td><input type="password" name="pw_check"></td>
</tr>
<!-- Step 2 : 개인정보 입력 -->
<tr height="50px" bgcolor="gray">
<th colspan="2">Step 2 : 개인정보</th>
</tr>
<tr height="35px" bgcolor="whitesmoke">
<td align="left">성별</td>
<td>
<input type="radio" name="gender" value="남">남
<input type="radio" name="gender" value="여">여
</td>
</tr>
<tr height="35px" bgcolor="whitesmoke">
<td align="left">혈액형</td>
<td>
<select name="bt">
<option>A형</option>
<option>B형</option>
<option>O형</option>
<option>AB형</option>
</select>
</td>
</tr>
<tr height="35px" bgcolor="whitesmoke">
<td align="left">생일</td>
<td>
<input type="date" name="bd">
</td>
</tr>
<!-- Step 3 : 선호도 입력 -->
<tr height="50px" bgcolor="gray">
<th colspan="2">Step 3 : 선호도</th>
</tr>
<tr height="35px" bgcolor="whitesmoke">
<td align="left">취미</td>
<td>
<input type="checkbox" name="hobby" value="축구">축구
<input type="checkbox" name="hobby" value="야구">야구
<input type="checkbox" name="hobby" value="농구">농구
</td>
</tr>
<tr height="35px" bgcolor="whitesmoke">
<td align="left">좋아하는 색깔</td>
<td>
<input type="color" name="color">
</td>
</tr>
<!-- Step 4 : 하고싶은 말 입력 -->
<tr height="50px" bgcolor="gray">
<th colspan="2">Step 4 : 하고싶은 말</th>
</tr>
<tr>
<td colspan="2">
<textarea cols="56" rows="5" name="text"></textarea>
</td>
</tr>
<!-- 제출 및 초기화 -->
<tr height="35px" bgcolor="whitesmoke">
<td colspan="2" align="center">
<input type="submit">
<input type="reset">
</td>
</tr>
</table>
</form>
</body>
</html>
package Servlet0127;
import java.io.IOException;
import java.io.PrintWriter;
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("/Join")
public class H02Join extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 한글 인코딩, 출력 스트림
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
// 데이터 불러오기
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String pw_check = request.getParameter("pw_check");
String gender = request.getParameter("gender");
String bt = request.getParameter("bt");
String bd = request.getParameter("bd");
String[] hobby = request.getParameterValues("hobby");
String color = request.getParameter("color");
String text = request.getParameter("text");
// 데이터 출력
out.print("아이디 : "+id+"<br>");
out.print("비밀번호 : "+pw+"<br>");
if (pw.equals(pw_check)) {
out.print("비밀번호가 일치합니다."+"<br>");
} else {
out.print("비밀번호가 일치하지 않습니다."+"<br>");
}
out.print("성별 : "+gender+"<br>");
out.print("혈액형 : "+bt+"<br>");
out.print("생일 : "+bd+"<br>");
out.print("취미 : ");
for (int i = 0; i < hobby.length; i++) {
out.print(hobby[i]+" ");
}
out.print("<br>");
out.print("좋아하는 색깔 : "+color+"<br>");
out.print("하고 싶은 말 : "+text);
}
}
'JSP Servlet' 카테고리의 다른 글
JSP Servlet 내장 객체 (Implicit Object) (0) | 2023.02.04 |
---|---|
JSP Servlet Java Server Pages 기본 (0) | 2023.01.30 |
JSP Servlet 데이터 전송 form 태그, input 태그 (0) | 2023.01.27 |
JSP Servlet Print, Table (0) | 2023.01.26 |
JSP Servlet 기본 (0) | 2023.01.26 |
댓글