서블릿의 응답 처리 방법

2022. 1. 31. 03:10·Back/JSP
목차
  1. MIME-TYPE
  2. HttpServeltResponse를 이용한 서블릿 응답 실습

서블릿의 요청 처리방법

https://sy-blog.tistory.com/69

 

Servlet을 사용한 로그인 기능 구현

1) name 속성이 모두 subject로 같다. 2) 전송을 클릭하면 매핑 이름이 action에 설정한 input 서블릿으로 전송된다. 서블릿 작성 package sec01.ex01; import java.io.IOException; import javax.servlet.Servle..

sy-blog.tistory.com

 

 

서블릿이 요청을 받아 처리한 결과를 클라이언트에게 응답하는 기능을 알아보자

서블릿에서 응답을 처리하는 방법은 다음과 같다.

 

1) doGet() 또는 doPost() 메소드 안에서 처리한다.

2) javax.servlet.http.HttpServletResponse 객체를 이용한다.

3) setContentType()을 이용해 클라이언트에게 전송할 데이터 종류를 지정한다.

4) 클라이언트와 서블릿의 통신은 자바 I/O의 스트림을 이용한다.

 

서블릿 응답 처리는 doGet() 또는 doPost() 메소드의 두번째 매개 변수인 HttpServletResponse 객체를 이용하여 처리한다.

웹 브라우저와 서블릿의 응답 과정은 자바 I/O의 기능인 스트림을 이용하여 이루어진다.

 

MIME-TYPE

웹 어플리케이션은 클라이언트에 해당하는 웹 브라우저와 서버에 해당하는 서블릿이 서로 데이터를 주고받으면서 실행한다.

웹 브라우저가 네트워크를 통해 서블릿에 데이터를 보내는 경우 서블릿은 네트워크로부터 데이터를 입력 받는다.

반대로 서블릿이 웹 브라우저로 데이터를 전송하는 경우에는 네트워크로 데이터를 출력한다. 즉, 네트워크에 대해 자바 I/O 스트림 클래스의 입출력 기능을 이용하면 쉽게 웹 어플리케이션의 네트워크 기능을 구현할 수 있다.

 

서버에서 웹 브라우저로 데이터를 전송할 때는 어떤 종류의 데이터를 전송하는지 웹 브라우저에 알려줘야 한다. 그 이유는 웹 브라우저가 전송 받을 데이터의 종류를 미리 알고 있으면 더 빠르게 처리할 수 있기 때문이다.

따라서 서버(서블릿)에서 웹 브라우저로 데이터를 전송할 때는 톰캣 컨테이너에서 미리 제공하는 여러가지 전송 데이터 종류 중 하나를 지정해서 웹 브라우저로 전송한다.

이처럼 톰캣 컨테이너에서 미리 설정해 놓은 데이터 종류들을 MIME-TYPE(마임 타입) 이라고 한다.

 

서버(서블릿)에서 자바I/O의 스트림 클래스를 이용하여 웹 브라우저로 데이터를 전송할 때는 MIME-TYPE을 설정해서 전송할 데이터의 종류를 지정한다.

 

예시)

∙ HTML로 전송 시 : text/html

∙ 일반 텍스트로 전송 시 : text/plain

∙ XML 데이터로 전송 시 : application/xml

 

웹 브라우저는 기본적으로 HTML만 인식하므로 서블릿에서 전송하는 대부분의 데이터는 MIME-TYPE을 text/html로 지정한다.

 

HttpServeltResponse를 이용한 서블릿 응답 실습

login.html

<!DOCTYPE html>
<html>
	<head>
	<meta charset="UTF-8">
	<title>로그인</title>
	</head>
	
	<body>
		<form name="formLogin" method="get" action="login" enctype="UTF-8">
			
			아이디: <input type="text" name="user_id"> <br>
			비밀번호: <input type="password" name="user_pw"> <br>
			
			<input type="submit" value="로그인"> <input type="reset" value="다시입력">
		</form>
	
	</body>
</html>

LoginServlet.java

package sec01.ex01;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
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("/login")
public class LoginServlet extends HttpServlet {
       
    
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	public void init(ServletConfig config) throws ServletException {
		System.out.println("init 메소드 호출");
	}


	protected void doGet(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("user_id");
		String pw = request.getParameter("user_pw");
		
		String data = "<html>";
		data += "<body>";
		data += "아이디: " + id;
		data += "<br>";
		data += "패스워드: " + pw;
		data += "</body>";
		data += "</html>";
		
		out.print(data);
	}
	
	public void destroy() {
		System.out.println("destroy 메소드 호출");	
	}

}

GET 방식은 이렇게 구현이 간편하지만 어떤 데이터를 전송하는지가 모두 노출되기 때문에 보안상으로는 좋지 않다.

POST 방식으로 서블릿에 요청

login.html

<!DOCTYPE html>
<html>
	<head>
	<meta charset="UTF-8">
	<title>로그인</title>
	</head>
	
	<body>
		<form name="formLogin" method="post" action="login2" enctype="UTF-8">
			
			아이디: <input type="text" name="user_id"> <br>
			비밀번호: <input type="password" name="user_pw"> <br>
			
			<input type="submit" value="로그인"> <input type="reset" value="다시입력">
		</form>
	
	</body>
</html>

LoginServlet2.java

package sec01.ex01;

import java.io.IOException;
import javax.servlet.ServletConfig;
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("/login2")
public class LoginServlet2 extends HttpServlet {
	
	public void init(ServletConfig config) throws ServletException {
		System.out.println("init 메소드 호출");
	}

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


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		//웹 브라우저에서 전송된 데이터의 인코딩을 설정
		request.setCharacterEncoding("UTF-8");
		
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
		
		System.out.println("아이디: " + id);
		System.out.println("비밀번호: " + pw);
	}
	
	public void destroy() {
		System.out.println("destroy 메소드 호출");	
	}

}

웹 브라우저에서 전송되는 데이터는 TCP/IP의 헤더에 숨겨진 채 전송되므로 브라우저의 주소청을 보면 URL 뒤에는 아무것도 표시되지 않는다

 

저작자표시 (새창열림)

'Back > JSP' 카테고리의 다른 글

Port 8080 required by Tomcat v9.0 Server at localhost is already in use. 오류  (0) 2022.01.31
자바스크립트로 서블릿에 요청하기  (0) 2022.01.31
이클립스 Run On Server [Choose an existing server] 비활성화 돼있을 때  (0) 2022.01.31
Servlet의 세가지 기능  (0) 2022.01.31
[Servlet 이해하기] 서블릿이란?  (0) 2022.01.27
  1. MIME-TYPE
  2. HttpServeltResponse를 이용한 서블릿 응답 실습
'Back/JSP' 카테고리의 다른 글
  • Port 8080 required by Tomcat v9.0 Server at localhost is already in use. 오류
  • 자바스크립트로 서블릿에 요청하기
  • 이클립스 Run On Server [Choose an existing server] 비활성화 돼있을 때
  • Servlet의 세가지 기능
soyeon26
soyeon26
  • soyeon26
    개발 일지
    soyeon26
  • 전체
    오늘
    어제
    • 분류 전체보기 (107)
      • Web (22)
        • Web (1)
        • HTTP (0)
      • Language (29)
        • Java Script (3)
        • Type Srcipt (1)
        • Java (25)
      • Front (19)
        • HTML+CSS (4)
        • React (15)
      • Back (41)
        • Spring(Springboot) (9)
        • JSP (21)
        • Database (5)
        • NestJS (6)
      • Devops (6)
        • Docker (1)
        • Git & SVN (5)
      • App (7)
        • Android (7)
      • IT 정보 (3)
  • 블로그 메뉴

    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    csrvsssr
    javascript
    java의 정석
    백엔드
    과학기술인번호 조회
    과학기술인 등록번호 발급
    SSR
    springboot
    김영한
    중복제거
    Next.js 필요성
    스프링부트
    Spring
    sql강의
    React Next.js
    데이터베이스 강의
    강의후기
    강의 후기
    과학기술인 등록
    과학기술인 번호 발급
    Java
    SQL강의 추천
    자바스크립트set
    csr과ssr의 차이
    서블릿
    과학기술인등록번호 조회
    React
    프론트엔드
    Next.js
    인프런
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
soyeon26
서블릿의 응답 처리 방법

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.