Servlet

Codren·2021년 6월 28일
0

Servlet / JSP

목록 보기
1/2

Section 1. Servlet

1. 서블릿 (Servlet)

클라이언트의 HTTP 요청을 동적으로 처리하고, 그 결과를 반환하는 자바 웹 서버 애플리케이션 컴포넌트 (서블릿이 자바 웹 서버 애플리케이션 그 자체 또는 구성 단위)

  • Server + application + let (작은) 또는 Server applet
  • HTTP 를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속 받음
  • MVC 패턴에서 Controller 로 이용됨




2. Servlet 생성

  • javax.servlet.http.HttpServlet 클래스 상속
  • service() 메서드 오버라이딩
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class FirstServlet extends HttpServlet{
	
	@Override
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		System.out.println("Hello Servlet");
	}
}




3. GET / POST 요청 처리

  • 부모의 service() 메서드는 요청이 Get / Post 방식인지 판단하여 doGet() / doPost() 메서드 호출
  • 첫 번째 방법
    - service() 메서드를 오버라이딩하여 안에서 Get / Post 동작 구현
public class Myservlet extends HttpServlet{
	
    @Override
    protected void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        if(req.getMethod().equals.("GET")){
            System.out.println("GET 요청이 왔습니다.");
        }
        else if(req.getMethod().equals.("POST")){
            System.out.println("POST 요청이 왔습니다.");
        }
    }
}

  • 두 번째 방법
    - doGet() / doPost() 메서드 오버라이딩
    - service() 메서드는 원래 부모의 메서드 내용을 수행
@Override
protected void doGet(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    System.out.println("GET 요청이 왔습니다.");
}

@Override
protected void doPost(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    System.out.println("POST 요청이 왔습니다.");
}



Section 2. Servlet Container

1. 서블릿 컨테이너 (Servlet Container)

서블릿을 관리하는 컨테이너, 즉 클라이언트의 요청에 맞게 서버의 서블릿을 구동시키는 역할

  • 서블릿은 스스로 클라이언트의 요청을 입력 받아 처리할 수 없음
  • 서블릿 (웹 애플리케이션)을 구동시키는 환경을 제공하므로 WAS
  • 종류 - Tomcat, WebLogic, WebSphere, Jeus, JBoss 등등




2. Apache Tomcat

  • 웹 서버 - Apache / WAS - Tomcat (Apache Tomcat 다운로드)
  • 서버 실행 및 종료 - 터미널에서 설치폴더를 디렉토리 기준으로 bin/startup.sh (shutdown.sh)
  • 서버 접속 화면 (8080 포트)




3. Servlet Mapping

  • 서블릿 컨테이너가 클라이언트의 요청을 지정된 Servlet 으로 Mapping 하는 것

  • web.xml 방식
    - 톰캣폴더/webapps/ROOT/WEB-INF/web.xml 파일 수정

<web-app> 태그 안에 지정 
  <servlet>
      <servlet-name> myservlet </servlet-name>		// 어떤 이름으로 사용할 것인지 지정
      <servlet-class> Myservlet </servlet-class>	// 지정할 서블릿 클래스명 지정 (패키지포함)
  </servlet> 

  <servlet-mapping>
      <servlet-name> myservlet </servlet-name>		// 해당 이름의 서블릿을
      <servlet-class> /hello </servlet-class>		// URL /hello 요청이 왔을 때 구동 
  </servlet-mapping> 
</web-app>

  • annotation 방식
    - 톰캣폴더/webapps/ROOT/WEB-INF/web.xml 파일 수정
<web-app> 태그 metadata-complete="false" 지정  // 메타 데이터를 모두 xml 에 하지 않았다는 의미

         - 서블릿 클래스에 @WebServlet 어노테이션 지정

@WebServlet("/hello")
public class Myservlet extends HttpServlet{
...
}




4. Servlet 동작 과정

    ① 클라이언트의 요청을 서블릿 컨테이너가 받음
    ② web.xml 또는 어노테이션을 확인하여 지정된 서블릿을 구동
    ③ service() 메서드를 수행하여 Get 또는 Post 요청에 맞게 비지니스 로직 처리
    ④ 서블릿 처리 결과를 서블릿 컨테이너가 클라이언트에게 반환함

0개의 댓글