article thumbnail image
Published 2022. 5. 29. 21:49

서블릿을 사용하는 이유는 간단하게 말하자면 정적인 화면에서 동적인 화면을 구동하기 위해서 서블릿을 사용한다. 

여기서 동적인 화면이란 ? 웹페이지에 로그인할때 "안녕하세요 고객님" 이라는 문구대신 "안녕하세요 xxx님" 하면서 계정정보에 따라서 정보가 다르게 출력되게 만드는 소프트웨어 컴포넌트라고 볼 수 있다.

 

[서블릿의 특징]

  • MVC모델에서 controller 기능을 구현한다 
  • html을 통해서 서버에 응답 

MVC모델이란?

하나의 JSP에서 View, Control, Model을 하면 유지보수하기 힘든 점을 고안하여 http사용에 용이한 JSP에서는 View를 구현 / Java를 기반으로 구현할 수 있는 Servlet은 기능 구현을 위한 자바 코드를 작성  /  Model의 경우에는 컨트롤러에서 특정요청이 들어오면 기능을 수행하고 컨트롤러에 해당 기능을 반환해주는 역할을 한다 그래서 간단한 기능을 구현할 경우에는 Model을 생략하고 Controller(Servlet)에서 Model의 기능까지 구현하는 코드를 작성하는 경우도 많다.

<서블릿 사용하기>

서블릿(Servlet)을 사용하기 앞서 복잡한 아키텍처대신 기본적으로 알아야하는 개념들만 이해하기 쉽고 간단하게 설명해보려고한다 

클라이언트 (브라우저) : 정보를 요청한 곳

클라이언트가 요청한 정보를 Http Request를 Web Server로 전송을 하면 Http Response는 request를 통해서 얻어온 정보에 대한  Response를 담아서 다시 클라이언트가 요청한 정보를 보내주면 되는 것이다. 

request : 클라이언트 요청 정보 저장                                                                                                                                      response : 클라이언트가 요청한 정보 전송

이젠 코드를 통해서 어떻게 request와 response가 클라이언트와 소통하는지 알아보자

package exam;

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;


@WebServlet("/param")
public class ParameterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
  
    public ParameterServlet() {
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html"); //클라이언트가 요청한 정보를 request에 담고 클라이언트의 요청에 응답하기 위해서 response에 응답을 저장
		PrintWriter out = response.getWriter(); // prinwriter를 통해 요청정보를 출력 변수 out을 통해 클라이언트와 response의 연결통로를 만듬 
		//response하기 위해서 getWriter로 클라리언트의 요청정보를 가져옴
		out.println("<html>"); 
		out.println("<head><title>form</title></head>");
		out.println("<body>");

		String name = request.getParameter("name"); // 클라이언트에서 요청한 정보인 Parameter에서 name이라는 파라미터 변수명과 
		String age = request.getParameter("age"); // age라는 변수명을 가져옴 (파라미터는 다 문자열로 넘어오기 때문에 String 타입으로 가져옴)
		
		out.println("name : " + name + "<br>"); // http로 출력하기 위해서 out.print를 사용
		out.println("age : " +age + "<br>");
		
		out.println("</body>");
		out.println("</html>");
	}

}

 

       

  여기서 결과 값은 예상과 달리 name : null , age : null 로 출력이 되는데 파라미터에 값을 넣으려면 URL에 적힌 param        뒤에 param?name=kim&age=5; 이런식으로 클라이언트가 요청한 값을 기재해야 한다. 

 param?뒤에 문구들을 파라미터라고 부르며 "="의 앞부분들을 파라미터 변수 "="의 뒷부분은 파라미터 값으로 부른다. 

해당 예시는 doGET방식을 통해서 들어온 파라미터인데 doGET은 URL을 통해서 들어온 정보를 말하며 doPOST는 http에서 form 즉 아래와 같이 로그인 클릭창이나 클릭창을 누르면 정보가 전달되는 폼(input)을 통해 들어온 파라미터를 받는다. 

복사했습니다!