JSP 4. 서블릿 기본 (Servlet)

업데이트:
2 분 소요

서블릿 기본

HTTP (Hyper Text Transfer Protocol)

1) 단순하고 읽기 쉬움

  • 텍스트 기반의 프로토콜

2) 상태를 유지하지 않음 ( stateless )

  • 클라이언트 정보를 저장하지 않음

3) 확장 가능함

서블릿 요청과 응답 API

1) HTTPServletRequest

  • 요청과 관련된 클래스

2) HTTPServletReponse

  • 응답과 관련된 클래스
protected void doGet(HttpServletRequest request, 
HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet(로그인) 메서드 호출");
	}

HttpServletRequest의 form태그로 전송된 데이터를 받아오는 메서드

  • 서블릿에서 클라이언트의 요청 얻는 방법

1) String getParameter(String name)

  • name의 값을 알고 있을 때, 그리고 name에 대한 전송된 값을 받아오는 데 사용함.
/* getParameter()을 이용해 <input>태그의 name속성 값으로 
                                전송된 value를 받아옴 */
    String userId = request.getParameter("user_id");
    String userPw = request.getParameter("user_pw");

alt

2) String[] getParameterValues

  • 같은 name에 대해 여러 개의 값을 얻을 때 사용함.
    //하나의 name으로 여러 값을 전송하는 경우 getParameterValues()를 이용해 배열 형태로 반환됨
		String subject[] = request.getParameterValues("subject");
		for(String str : subject) {
			System.out.println("선택한 과목 : "+str);
        }

alt

  • 전송 결과

alt

3) Enumeration getParameterNames()

  • 전송되는 데이터가 많은 경우 name 값을 일일이 기억할 필요없이 이용해서 name
    을 얻음
    // 전송되어 온 name 속성들만 Enumeration타입으로 받아옴
		Enumeration<String> enu = request.getParameterNames();
		
		// 각 name을 하나씩 가져와 대응해서 전송되어 온 값을 출력함
		while(enu.hasMoreElements()) {
			String name = enu.nextElement();
			String[] values = request.getParameterValues(name);
			for(String value : values) {
				System.out.println("name : "+name+" , value = "+value);
			}
        }
  • 전송 결과

alt

서블릿의 응답 처리

  • doGet() 이나 doPost() 메서드 안에서 처리함.
  • HttpServletResponse 객체를 이용함.
  • 클라이언트에게 전송할 데이터 종류 (MIME-TYPE)를 지정함.
    • 미리 지정해 놓은 데이터 종류로 서블릿에서 브라우저로 전송시 설정해 사용함
    • HTML로 전송시 : text/html
    • 일반 텍스트로 전송 시 : text/plain
	protected void doGet(HttpServletRequest request, HttpServletResponse
     response) throws ServletException, IOException {
		// 웹 브라우저에서 전송된 데이터의 인토딩 설정
		request.setCharacterEncoding("utf-8");
		
		// 응답할 데이터 종류가 html임 설정
		response.setContentType("text/html;charset=utf-8");
		
		String userId = request.getParameter("user_id");
		String userPw = request.getParameter("user_pw");
		// 출력 스트림 PrintWriter 객체
		PrintWriter out = response.getWriter();
		
		// 브라우저로 출력할 데이터를 문자열로 연결해서 html태그로 만듦
		String data = "<html>";
		data += "<body>";
		data += "아이디 : "+ userId;
		data += "<br>";
		data += "패스워드 : "+userPw;
		data += "</body>";
		data += "</html>";
		
		// html 태그 문자열을 웹브라우저로 출력함
		out.print(data);
	}

alt

웹 브라우저에서 서블릿으로 데이터 전송 방식

GET 방식 & POST 방식

GET 방식 POST 방식
-서블릿에 데이터를 전송할 때 데이터가 URL뒤에 name=value 형태로 전송됨 - 데이터를 요청 메세지의 body에 담아 전송함.
- 여러개의 데이터를 전송 할 때는 ‘&’로 구분해서 전송됨  
- URL에 데이터가 노출되므로 보안이 취약함 - 보안에 유리함 (암호화,HTTPS)
- 전송할 수 있는 데이터는 최대 255자임 - 전송데이터 용량이 무제한임 (대용량)
- 기본 전송 방식, 사용이 쉬움 - 처리 속도가 GET방식보다 느림.
- 서블릿에서는 doGet()으로 전송된 데이터를 처리 - 서블릿에서는 doPost()를 이용해 데이터를 처리함.
- 서버의 리소스를 가져오기 위해 설계 - 서버에 데이터를 올리기 위해 설계됨.
- Query String을 통해 데이터를 전달 (소용량)  
- 데이터 공유에 유리 - 데이터 공유에는 불리
- 예)검색엔진에서 검색단어 전송에 이용 - 예) 게시판 글쓰기 , 로그인, 회원가입

POST 방식으로 서블릿에 요청

// post 방식으로 전송된 데이터를 처리하기 위해 doPost()를 이용함
	protected void doPost(HttpServletRequest request, HttpServletResponse
     response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String userId = request.getParameter("user_id");
		String userPw = request.getParameter("user_pw");
		
		System.out.println("아이디 : "+userId);
		System.out.println("패스워드 : "+userPw);
	}

alt

댓글남기기