JSP Servlet

JSP Servlet 데이터 전송 방식 Get, Post

wanttosleep1111 2023. 1. 28. 21:57

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

	}

}