서블릿 개발하기 연재목록

서블릿 개발하기 연재목록

#1 개발환경 구축 (https://opensrc.tistory.com/180?category=475522)

#2 프로잭트 생성 (https://opensrc.tistory.com/181?category=475522)

#3 첫번째 JSP 파일 만들기 (https://opensrc.tistory.com/182?category=475522)

#4 첫번째 서블릿 만들기 (https://opensrc.tistory.com/183?category=475522)

#5 포스트 요청을 처리하는 서블릿 만들기 (https://opensrc.tistory.com/203?category=475522)

#6 GET/POST 요청과 함께 파라메터 전달 하기 (https://opensrc.tistory.com/204?category=475522)

#7 Servlet 들여다 보기 (https://opensrc.tistory.com/206?category=475522)

===========================================================

 

 

[서블릿 개발하기] #6 GET/POST 요청과 함께 파라메터 전달 하기

우리가 사용하는 웹 어플리케이션은 데이터 입력 없이 자체 만으로 컨텐츠를 표시하는 경우도 있지만 대부분 사용자로 부터 데이터를 입력 받아서 처리를 하고 결과를 보여주는 경우가 대부분입니다.

예를 들어 이 블로그의 특정 게시물을 읽게 되면 https://opensrc.tistory.com/203?category=475522 이렇게 생긴 도메인 주소와 URI, 파라메텨들이 서버로 전송(Request)이 되고 서버는 그것을 받아서 URI 부분을 파싱하고 URI에 해당하는 어플리케이션에 파라메터를 전달하고 어플리케이션은 그 파라메터에 맞는 데이터를 가공하여 다시 브라우저로 응답(Response)되는 구조입니다.

이제 우리가 만들었던 어플리케이션에 사용자가 입력한 값을 받아서 처리 하는 것을 구현해 보도록 하겠습니다.

index.jsp 에 다음 내용을 추가 합니다.

What is your name ? <input type="text" name="my_name"/><br/>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
hello, world</br>
<form action="/hello" method="POST">
	What is your name ? <input type="text" name="your_name"/><br/>
	<input type="submit" value="Submit"/>
</form>
</body>
</html>

http://localhost 로 접속해 보면 아래와 같은 화면이 나옵니다.

우리가 추가한 입력창 의 이름을 your_name 으로 지정 한것을 기억하고 서버에서 저 값을 받아서 화면에 보여주도록 해야 합니다.

POST Request  파라메터 값 추출

우리가 만든 화면은 아직 POST로 호출 하므로 HelloWorldServlet의 doPost 메서드를 먼저 수정해 보겠습니다. 아래 소스를 잘 보시고 두줄을 추가 합니다.

String yourName = request.getParameter("your_name"); // request에서 화면으로 부터 넘어온 파라메터의 값을 추출 합니다. 

out.println("You'r name is " + yourName);

package com.tistory.opensrc.basicservlet.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 첫번째 hello, world 서블릿
 * @author cloud
 *
 */
public class HelloWorldServlet extends HttpServlet {

	/**
	 * serial version id
	 */
	private static final long serialVersionUID = 701289870660846795L;

	/**
	 * GET 요청을 처리
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html"); // text html 형태로 출력 하겠다고 지정함
		PrintWriter out = response.getWriter(); // response로 부터 출력 장치를 확보
		
		// html 내용을 출력
		out.println("<html>");
		out.println("hello, world<br/>");
		out.println("method : " + request.getMethod());
		out.println("</html>");
	}
	

	/**
	 * POST 요청을 처리
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html"); // text html 형태로 출력 하겠다고 지정함
		PrintWriter out = response.getWriter(); // response로 부터 출력 장치를 확보
		
		String yourName = request.getParameter("your_name"); // request에서 화면으로 부터 넘어온 파라메터의 값을 추출 합니다. 
		
		// html 내용을 출력
		out.println("<html>");
		out.println("hello, world<br/>");
		out.println("method : " + request.getMethod() + "<br/>");
		out.println("You'r name is " + yourName);
		out.println("</html>");
	}
}

이제 화면에서 이름을 입력해 보겠습니다.

아래와 같이 나왔다면 성공입니다.

주의깊게 살펴 보셔야 할 것은 브라우저 주소창에 localhost/hello 만 표시된다는 것 입니다.

이제 doGet 메서드에도 같은 코드를 추가해 보겠습니다.

package com.tistory.opensrc.basicservlet.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 첫번째 hello, world 서블릿
 * @author cloud
 *
 */
public class HelloWorldServlet extends HttpServlet {

	/**
	 * serial version id
	 */
	private static final long serialVersionUID = 701289870660846795L;

	/**
	 * GET 요청을 처리
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html"); // text html 형태로 출력 하겠다고 지정함
		PrintWriter out = response.getWriter(); // response로 부터 출력 장치를 확보

		String yourName = request.getParameter("your_name"); // request에서 화면으로 부터 넘어온 파라메터의 값을 추출 합니다. 
		
		// html 내용을 출력
		out.println("<html>");
		out.println("hello, world<br/>");
		out.println("method : " + request.getMethod());
		out.println("You'r name is " + yourName);
		out.println("</html>");
	}
	

	/**
	 * POST 요청을 처리
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html"); // text html 형태로 출력 하겠다고 지정함
		PrintWriter out = response.getWriter(); // response로 부터 출력 장치를 확보
		
		String yourName = request.getParameter("your_name"); // request에서 화면으로 부터 넘어온 파라메터의 값을 추출 합니다. 
		
		// html 내용을 출력
		out.println("<html>");
		out.println("hello, world<br/>");
		out.println("method : " + request.getMethod() + "<br/>");
		out.println("You'r name is " + yourName);
		out.println("</html>");
	}
}

 

그리고 사용자 요청을 GET으로 변경합니다.

index.jsp 에 <form action="/hello" method="POST"> 부분을 GET으로 변경합니다.

그리고 주소창에 http://localhost/ 를 다시 입력하고 이름을 입력하고 Submit 을 클릭해 봅니다.

POST 요청에서는 주소창에 localhost/hello 만 표시되었던 반면, GET 요청에서는 localhost/hello?your_name=CloudNine 라고 ? 뒷 부분에 파라메터 명과 값이 표시되어 있습니다. F5 키를 눌러서 새로고침 하거나 다른 브라우저 창을 열고 복사해서 붙혀 넣어도 똑같은 화면이 출력 됩니다.

그럼 다시 index.jsp의 <form ... method="GET"/> 부분을 POST 로 바꾸고 http://localhost/ 를 호출해서 값을 전송해 보겠습니다. 그리고 GET요청 화면에서 했던 것 처럼 F5 키를 눌러보면

이런 화면을 만나게 됩니다 '계속' 버튼을 누르면 이전 요청에 값들을 이용해서 다시 처리 하겠지만. GET요청 처럼 바로 실행되지는 않습니다. 그리고 주소창의 내용을 복사해서 다른 브라우저 창에 붙혀 넣으면

GET 요청에 You;'s name is null 로 표시됩니다.

브라우저 주소창에 주소를 직접 입력하는 것은 GET 요청으로 간주 된다는 것을 기억하시기 바랍니다.

 

 

여기까지 간단한 서블릿 개발에 대해 알아봤습니다. 지금 까지 한 것을 조금 복잡하게 이야기 하면 JSP Model 1 방식의 Java Application 이라고 할 수 있습니다.

 

6번의 연재에서 기초적인 것은 제외 하고 

  • JSP는 수정후 최초 실행시 Servlet 형태로 변환된후 컴파일 되어 (Tomcat 같은)Application Server에 적재 되어 실행 된다는 점.
  • 모든 Servlet 은 javax.servlet.http.HttpServlet 을 상속 받는다는 점
  • GET, POST 요청의 차이점과 그 목적이 GET은 읽기 요청에 사용되고 POST는 쓰기/수정/삭제 등의 특성에 맞게 고안되어 있다는 것

이정도 이해 하시고 기억하시면 될 것 같습니다.

여기까지 서블릿 개발하기 기초 편을 마무리하고

차후에 시간이 되는 대로 JSP Model 1 에서 확장해서 JSP Model 2 Java Web Application, 우리가 흔히 말하는 Java MVC 방식에 대해 알아보도록 하겠습니다.

 

감사합니다.

+ Recent posts