Servlet&JSP - 사용자 데이터 전송 방식

사용자 데이터 전송 방식

get()

URL창에 "?"뒤에 데이터를 입력하는 방법(쿼리스트링)

데이터가 여러 개일 경우 &로 묶어서 보냄

데이터가 여러 개일 경우 데이터 크기에 한계가 있으며 보안 취약

 

post()

body에 내용을 보내는 방식으로 데이터 크기에 제한이 없고

보안이 뛰어남

 

서블릿 메소드

doGet()

client에서 데이터 전송 방식을 get방식으로 전송하면 호출되는 메소드

 

<!-- reg.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
</head>
<body>
    <!-- action : 어디로 요청을 보낼것인지 매핑명작성 -->
    <form action="/momory/reg" method="get">
        <div>
            아이디 : <input type="text" name="userID">
        </div>
        <div>
            비밀번호 : <input type="password" name="userPwd">
        </div>
        <div>
            이름 : <input type="text" name="userName">
        </div>
        <div>
            전화번호 : <input type="text" name="userTel">
        </div>
        <div>
            성별 : 남자 <input type="radio" name="gender" value="남"> 
                   여자 <input type="radio" name="gender" value="여">
        </div>
        <div>
            좋아하는 운동 : 축구 <input type="checkbox" name="hobboy" value="축구">
                            농구 <input type="checkbox" name="hobboy" value="농구">
                            야구 <input type="checkbox" name="hobboy" value="야구">
                            줄넘기 <input type="checkbox" name="hobboy" value="줄넘기">
        </div>
        <div>
            <input type="submit" value="가입하기">
            <input type="reset" value="다시쓰기">
        </div>
    </form>
</body>
</html>
// RegServlet.java
// 매핑명 : /reg
package com.memory.sec01;

import java.io.IOException;
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("/reg")
public class RegServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public RegServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 요청한 값 받아오기
		// request.getParameter("name명") : 반환값 String
		
		String id = request.getParameter("userID");
		String pwd = request.getParameter("userPwd");
		String name = request.getParameter("userName");
		String tel = request.getParameter("userTel");
		String gender = request.getParameter("gender");
		
		System.out.println("===== doGet 호출 =====");
		System.out.println("id : " + id);
		System.out.println("pwd : " + pwd);
		System.out.println("name : " + name);
		System.out.println("tel : " + tel);
		System.out.println("gender : " + gender);
		
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

}

 

위의 소스로 작성후 

작성후 가입하기 버튼을 누르면

input의 값들이 action에 적었던 서블릿으로 데이터가 보내지게됩니다.

흰화면에 파라미터값들이 작성되어있는것을 확인할수있습니다.

get의 특성은 넘어온값들을 보여지게하기떄문에 보안에 취약하다

회원가입, 로그인같은경우에 doGet으로사용하면 보안에 취약하다.

 

이클립스에서 console창 확인해보자

그럼 html에서 작성한 값을 확인할수있고

취미같은경우는 하나의 name값에 여러개의 value를 가져와야하는데

이럴경우에는 배열로받아야한다.

아까 2개의 체크박스를 선택했는데 결과값을보자면

 

하나의 값만 돌아왔다 여러개의 값을받을 경우를 확인해보자

package com.memory.sec01;

import java.io.IOException;
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("/reg")
public class RegServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public RegServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 요청한 값 받아오기
		// request.getParameter("name명") : 반환값 String
		
		String id = request.getParameter("userID");
		String pwd = request.getParameter("userPwd");
		String name = request.getParameter("userName");
		String tel = request.getParameter("userTel");
		String gender = request.getParameter("gender");
		
		System.out.println("===== doGet 호출 =====");
		System.out.println("id : " + id);
		System.out.println("pwd : " + pwd);
		System.out.println("name : " + name);
		System.out.println("tel : " + tel);
		System.out.println("gender : " + gender);
		
		// 1. 배열로받아야한다.
		String[] hobbyArr = request.getParameterValues("hobby");
		for(int i = 0; i < hobbyArr.length; i++) {
			System.out.println("hobbyArr[" + i + "] : " + hobbyArr[i]);
		}
		
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

}

 

 

doPost()

client에서 데이터 전송 방식을 post방식으로 전송하면 호출되는 메소드

사용방법은 doGet()과 비슷하다 다만 파라미터에 값이 표시가안될뿐

// reg.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
</head>
<body>
    <!-- action : 어디로 요청을 보낼것인지 매핑명작성 -->
    <form action="/momory/reg" method="post">
        <div>
            아이디 : <input type="text" name="userID">
        </div>
        <div>
            비밀번호 : <input type="password" name="userPwd">
        </div>
        <div>
            이름 : <input type="text" name="userName">
        </div>
        <div>
            전화번호 : <input type="text" name="userTel">
        </div>
        <div>
            성별 : 남자 <input type="radio" name="gender" value="남"> 
                   여자 <input type="radio" name="gender" value="여">
        </div>
        <div>
            좋아하는 운동 : 축구 <input type="checkbox" name="hobby" value="축구">
                            농구 <input type="checkbox" name="hobby" value="농구">
                            야구 <input type="checkbox" name="hobby" value="야구">
                            줄넘기 <input type="checkbox" name="hobby" value="줄넘기">
        </div>
        <div>
            <input type="submit" value="가입하기">
            <input type="reset" value="다시쓰기">
        </div>
    </form>
</body>
</html>

 

package com.memory.sec01;

import java.io.IOException;
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("/reg")
public class RegServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public RegServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 요청한 값 받아오기
		// request.getParameter("name명") : 반환값 String
		
		String id = request.getParameter("userID");
		String pwd = request.getParameter("userPwd");
		String name = request.getParameter("userName");
		String tel = request.getParameter("userTel");
		String gender = request.getParameter("gender");
		
		System.out.println("===== doPost 호출 =====");
		System.out.println("id : " + id);
		System.out.println("pwd : " + pwd);
		System.out.println("name : " + name);
		System.out.println("tel : " + tel);
		System.out.println("gender : " + gender);
		
		// 1. 배열로받아야한다.
		String[] hobbyArr = request.getParameterValues("hobby");
		for(int i = 0; i < hobbyArr.length; i++) {
			System.out.println("hobbyArr[" + i + "] : " + hobbyArr[i]);
		}
	}

}

 

값 입력후 전송하면 post방식은 아래와같이 value값이 안나오는것을확인할수있따.

이클립스의 콘솔창을 확인해보자

하지만 영어랑 숫자값은 정상적으로 넘어오지만 한글값은 이상한언어로 표현되는것을확인할수있다.

왜그러냐하면 post방식으로 값을 받으면 언어의값이 ISO- 형식으로되어있어

UTF-8로 변환해줘야한다.

package com.memory.sec01;

import java.io.IOException;
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("/reg")
public class RegServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public RegServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// post방식으로 값 요청시 한글안나오는부분수정
		request.setCharacterEncoding("UTF-8");
		
		// 요청한 값 받아오기
		// request.getParameter("name명") : 반환값 String
		
		String id = request.getParameter("userID");
		String pwd = request.getParameter("userPwd");
		String name = request.getParameter("userName");
		String tel = request.getParameter("userTel");
		String gender = request.getParameter("gender");
		
		System.out.println("===== doPost 호출 =====");
		System.out.println("id : " + id);
		System.out.println("pwd : " + pwd);
		System.out.println("name : " + name);
		System.out.println("tel : " + tel);
		System.out.println("gender : " + gender);
		
		// 1. 배열로받아야한다.
		String[] hobbyArr = request.getParameterValues("hobby");
		for(int i = 0; i < hobbyArr.length; i++) {
			System.out.println("hobbyArr[" + i + "] : " + hobbyArr[i]);
		}
	}

}

수정후 다시 출력해보면 정상적으로 호출되어있는것을 확인할수 있다.

'프로그래밍 > JSP' 카테고리의 다른 글

JSP - 미니 프로젝트 INTRO  (0) 2021.08.23
JSP  (0) 2021.08.18
Servlet&JSP - tomcat  (0) 2021.08.17
JSP 파일업로드, 다운로드  (0) 2021.02.12
jstl .jar파일 4개  (0) 2021.02.04
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유