손영배 블로그 누구나 쉽게 이해하고 습득하기

Servlet 본문

Web

Servlet

손영배 2019. 6. 17. 15:21

Servlet은 URL 요청을 처리하는 프로그램이라고 생각하면 된다.

예) http://localhost:8080/firstweb/HelloServlet을 브라우저에 요청을 하면 실제 HelloServlet하고 응답하는 서블릿 파일

    http://localhost:8080/{프로젝트이름}/{URL Mapping값}

HTTP 프로토콜에서 request 메서드에는 GET, POST, PUT, DELETE 등이 있다. 웹 브라우저가 GET 메서드 방식으로 요청을 보낼 때, 서브릿에 doGet() 메서드가 호출이 된다. 

 

GET 메서드는 웹 브라우저가 서버에게 문서를 요청할 때 사용하는 방식

Servlet 이란?

  • 자바 웹 어플리케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할
  • 서블릿을 정의 해보면
      - 서블릿(servlet)은 WAS에서 동작하는 Java 클래스이다.
      - 서블릿은 HttpServlet 클래스를 상속받아야 한다.
      - 서블릿과 JSP로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 이 두가지(JSP, 서블릿)를 조화롭게 사용해            야  한다.
    예 : 웹페이지를 구성하는 화면(HTML)은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 구현

Servlet 작성방법은 2가지로 나뉨

 

1. Servlet 3.0 spec 이상에서 사용하는 방법

 - web.xml 파일을 사용하지 않음

 - 자바 어노테이션(annontation)을 사용

 - 앞에서 실습했던 firstweb에서 사용

2. Servlet 3.0 spec 미만에서 사용하는 방법

 - Servlet을 등록할 때 web.xml파일에 등록해서 사용

예 : (3.0 미안에서는) URL이 /ten이라고 요청이 들어오면 이 URL mapping에서 찾아내고 여기에서 찾지 못하면 404페이지 나온다. 그런데 만약 존재한다면 servlet-name이라는 엘리멘트를 확인한다.

 

Servlet의 생명주기, 라이프 사이클 LifecycleServlet <  init -> service(request, response) -> destroy >

 

service(request, response) 메소드 

- HttpServlet의 service메소드는 템플릿 메소드 패턴으로 구현

- doGet : client의 요청이 Get일 경우에는 자신이 가지고 있는 doGet(request, response) 메소드를 호출

- dopost : client의 요청이 Post일 경우에는 자신이 가지고 있는 doPost(request, reponse)를 호출

HttpServletReqeuest , HttpServletResponse의 이해 

요청과 응답 : WAS는 웹 브라우저로부터 Servlet 요청을 받으면, 

 - 요청할 때 가지고 있는 온갖 정보를 HttpServletRequest객체를 생성하여 저장

 - 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse 객체를 생성

 - 생성된 HttpServletRequest, HttpServletResponse 객체를 서블릿에게 전달

 

HttpServletRequest

 - http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용합니다.

 - 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드를 가지고 있습니다.

 - body의 Stream을 읽어 들이는 메소드를 가지고 있습니다.

 

HttpServletResponse

 - WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언틍게 응답을 보내기 위한 HttpServletResponse     객체를 생성하여 서블릿에게 전달합니다.

- 서블릿은 해당 객체를 이용하여 content type, 응답코드, 응답 메세지 등을 전송합니다.

 

헤더 정보 읽어 들이기

- 웹 브라우저가 요청정보에 담아서 보내는 header값을 읽어 들여 브라우저 화면에 출력한다.

- package name : examples

- class name : HeaderServlet

- url mapping : /header

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.print("<html>");
		out.print("<head><title>form</title></head>");
		out.print("<body>");
		
		Enumeration<String> headerNames = request.getHeaderNames();
		while (headerNames.hasMoreElements()) {
			String headerName = headerNames.nextElement();
			String headerValue = request.getHeader(headerName);
			out.print(headerName + " : " + headerValue + "<br>");
		}
		
		out.print("</body>");
		out.print("</html>");
	}

 

파라미터를 읽어 들이면서 출력하는 서블릿

 - URL 주소의 파라미터 정보를 읽어 들여 브라우저 화면에 출력한다.

 - http://localhost:8080/firstweb/param?name=kim&age=5

 - package name : examples

 - class name : ParameterServlet

 - url mapping : /param

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.print("<html>");
		out.print("<head><title>form</title></head>");
		out.print("<body>");
		
		String name = request.getParameter("name");
		String age = request.getParameter("age");
		
		out.print("name : " + name + "<br>");
		out.print("age : " + age + "<br>");
		
		out.print("</body>");
		out.print("</html>");
		
	}

그 외의 요청정보 출력

- URI, URL, PATH, Remote host 등에 대한 정보 출력

- http://localhost:8080/firstweb/info

- package name : examples

- class name : InfoServlet

- url mapping :  /info

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.print("<html>");
		out.print("<head><title>info</title></head>");
		out.print("<body>");
		
		String uri = request.getRequestURI();
		StringBuffer url = request.getRequestURL();
		String contentPath = request.getContextPath();
		String remoteAddr = request.getRemoteAddr();
		
		
		out.print("uri : " + uri + "<br>");
		out.print("url : " + url + "<br>");
		out.print("contentPath : " + contentPath + "<br>");
		out.print("remoteAddr : " + remoteAddr + "<br>");
		
		out.print("</body>");
		out.print("</html>");
	}

'Web' 카테고리의 다른 글

Apache Tomcat  (0) 2019.06.16
CSS  (0) 2019.06.15
HTML Tag 리스트  (0) 2019.06.15
웹공부2 WAS (Web Application Server)  (0) 2019.06.14
HTTP에 S가 붙은 HTTPS 는 어떤 용도로 사용되는 건가요? HTTP와 무엇이 다른가요?  (0) 2019.06.14