본문 바로가기
강의/웹 프로그래밍(풀스택)

부스트코스 웹 프로그래밍(풀스택) - 1. 웹 프로그래밍 기초 - 5-4-3 강의 정리

by 리드민 2022. 4. 16.
반응형

[1] 강의

웹 프로그래밍(풀스택)

5. Servlet - BE

4) Request, Response 객체 이해하기-3

 

[2] 개념 정리

HttpServletRequest : Http프로토콜의 request 정보를 서블릿에게 전달하기 위한 목적으로 사용

Header정보, Parameter, Cookie, URI, URL 등의 정보를 읽어들이는 메소드를 가진 클래스

Body Stream을 읽어들이는 메소드를 가지고 있음

HttpServletResponse : HTTP 응답 메시지 생성, HTTP 응답코드 지정, 헤더 생성, 바디 생성 등의 기능이 있다.

 

[3] 강의 정리

  이번에는 파라미터를 읽어들여서 출력하는 서블릿을 작성해보도록 하겠다. 물음표, 지금 URL에 보면 이 ?를 기준으로 뒤에 있는 것들. 이 부분을 파라미터라고 한다. 중간에 &가 들어있다. &가 기준점이다. &를 계속 사용하면 더 많은 파라미터를 전달할 수도 있다. 앞에 =이라는 것을 기준으로 앞에 있는 것은 파라미터 이름, 뒤에 있는 것은 파라미터 값이라고 생각하면 된다. 이름은 kim, 나이는 5 이렇게 넘겨주고 싶은 거다. 그랬을 때, 클라이언트가 넘겨준 정보다. 이 정보를 읽어들여서 사용하면 된다. 그렇게 사용할 수 있는 서블릿 파일을 하나 만들어보려고 한다. 이클립스를 열어주고. 이제 서블릿 만드는 거는 익숙하죠? 여기에서 이번에는 파라미터 서블릿을 하나 만들어볼 거다. 요청 시에 URL mappings은 그냥 param 하고 하나 줄 거다. 그냥 둬도 상관 없는데 또 수정해보는 것도 하나의 연습이 될 수 있어서 바꿔보는 거다. 다른 이름으로 나는 요청하고 싶다. 다른 URL로 요청하고 싶어요 한다면 원하는 걸로 바꿔도 좋다.

  이번에도 요청이 들어오는데 doGet() 이라는 메서드에 오버라이드 해보자. doGet() 메서드 안에서 여러분들이 구현하실 내용은 안에 들어가는 내용이 이제 조금 익숙해질 거다. 다시 내용을 살펴보면 항상 응답으로 보내기 위한 부분은 response라는 객체에다가 담는다. 이제 기억하면 되겠고. 요청에 들어온 것들은 다 request가 가지고 있으니까 내가 꺼내올 정보들은 request 객체로부터 얻어온다. 이 정도 생각하면 될 거 같다. 응답을 보내는데 나는 어떻게 ContentTypetext/html로 보낼 거다. 라고 하는 거다. 그 다음에 요청한 클라이언트한테 어떻게 해야 한다. 응답을 해야 한다. 그러니까 클라이언트와 연결 통로를 하나 열어준다고 생각하면 되겠다. 여기에서 내가 응답한 내용이 HTML이기 때문에 텍스트지만 HTML의 형태를 갖춰서 넣어주고 있는 걸 볼 수 있다. 이 예제에서 가장 핵심 코드는 이거다. 잘 보면 값을 찾고 있는 거, 요청할 때 들고 들어온 값 중에서는 이 파라미터 정보들이 있다고 했다. 그래서 request한테 getParameter()라는 메서드를 수행하면 된다. 이때 아까 이 URL에서 봤을 때 앞쪽에 있는 게 파라미터 name이다. 뒤쪽에 있는 걸 값이라고 했던거 기억나는가. 그 부분을 다시 한번 생각하보면 이 파라미터 이름을 여기에 넣어주는 거다. 그러면 값이 나온다.

  우리 값은 kim이였다. kim이라는 값이 name에 들어갈거다. 마찬가지로 & 뒤에 있었다. age라는 애 이름이었고, 파라미터 이름이었다. 해당하는 값이 5라는 숫자였다. 들어올 거다. 숫자인데 왜 문자열이라고 생각할 수 있다. 숫자인지 모른다. 다 문자열로 넘어온다. 이렇게 들어왔다. 다음은 응답 결과에 각각 출력해주는 거다. 출력해주는 형태는 여러분이 원하는 대로 출력하면 된다. 나는 그냥 이렇게 출력해보록 할 거다. 실행해보면 어떤 결과값이 나올지 상상해봐라. 예상과 다르게 어떤가? namenull, agenull 이렇게 나왔다. 왜 그랬을까? 요청했던 URL를 잘 살펴봐라. 뒤에 아무것도 없었다. 여기에 반드시 물음표, 여기에서 값이 넘어갔으니까 name=kim&age=5 이렇게 값을 넘겨줘야지만 namekim, age5. 이렇게 출력되는 걸 볼 수 있다. 이것도 마찬가지다. 여러분이 원하는 대로 name의 값이 name 여기에 들어있는 값들은 얼마든지 바꿔도 괜찮다. 그러면 이 바뀐 값을 가지고 어떻게 할 거나? 응답 결과를 새로 만들어 낸다. 여기에서 응답 결과가 새로 만들어진다. 거기에 따라서 페이지, 이 응답 결과가 달라지니까 나오는 값이 달라진다. 이게 동적인 페이지라고 했었던거 기억하나? 이런 파라미터들은 반드시 URL을 통해서만 넘어오는 건 아니다. HTML form이라는 태그가 존재하는데 form 태그 안에는 input이라는 태그를 사용할 수 있다. input 태그 안에 들어있는 값들도 똑같이 이 파라미터로 넘어오기 때문에 똑같은 방법으로 꺼내서 사용하면 된다. 여기까지 요청할 때 가지고 들어온 파라미터를 읽어들여서 출력하는 서블릿을 작성해보자.

 

[4] 코드 정리

ParameterServlet.java

package examples;

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;

/**
 * Servlet implementation class ParameterServlet
 */
@WebServlet("/param")
public class ParameterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ParameterServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head><title>form</title></head>");
		out.println("<body>");

		String name = request.getParameter("name");
		String age = request.getParameter("age");
		
		out.println("name : " + name + "<br>");
		out.println("age : " +age + "<br>");
		
		out.println("</body>");
		out.println("</html>");
	}

}

 

반응형