백엔드

[자바 백엔드 멀티캠퍼스] - Servlet 정리 2

coyojo 2023. 4. 24. 12:59

💡서블릿의 LifeCycle은 ? 


객체가 생성되고 생성된 객체를 사용하고 객체를 메모리에서 해제하는 모든 작업 

 

 Servlet은 상속받아야 할 클래스가 정해져 있다. 그러므로 메소드를 오버라이딩해서 사용해야 한다. 

오버라이딩 해야 하는 메소드는 LifeCycle과 관련있는 메소드이다.

 

💡 [ 오버라이딩할 메소드 ]

  * 일반적인 서블릿 메소드 

 

   -  init : 서블릿객체가 초기화될때 호출되는 메소드

   -  service :  클라언트가 요청할때마다 호출되는 메소드

                     => 클라이언트의 요청을 처리하는 메소드로 요청을 받고 처리할 내용을 구현 

                          ex) 로그인, 게시판 목록보기, 메일읽기, 장바구니 조회, 구매, 예약하기.....

    - destroy : 서블릿 객체가 소멸될때 호출되는 메소드

                    => 즉 서블릿 클래스가 컴파일됐을때, was가 재부팅될때, context가 reload 될때

 

GenericServlet (Servlet 4.0 API Documentation - Apache Tomcat 9.0.74)

 

 

 

 

   

   *  Http 프로토콜상에서 요청방식에 따라 작업할때 필요한 메소드 

     - doGet :  클라이언트가 get방식으로 요청할 때 호출되는 메소드

     -  doPost : 클라이언트가 Post 방식으로 요청할 때 호출되는 메소드 

 

HttpServlet (Servlet 4.0 API Documentation - Apache Tomcat 9.0.74)

package basic;

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

public class firstServlet extends HttpServlet {
//servlet클래스는 상속받아야 하는 클래스가 정해져 있다. 
//application 처럼 main이라는 메서드 필요없다.
	public void service(HttpServletRequest req, HttpServletResponse res) {
		//HttpServletRequest객체와 HttpServletResponse 객체는 클라이언트의 요청과 응답을 처리하기 위한 객체로 
		//클라이언트가 요청한 내용을 클라이언트에 응답할 내용을 서버가 객체로 만들어서 service메소드를 호출할때 전달한다.
		System.out.println("FirstServlet실행. .");
	}

}

  

 

 

 

 

💡 [ 서블릿을 등록 ]

    - 서버가 요청을 분석해서 서블릿 디렉토리에서 서블릿을 찾아서 실행 할 수 있도록 요청별로 실행할 서블릿을 등록한다

    - 설정파일에 등록 ( web.xml)

    - 실제 작업은 annotation으로 설정

    - web.xml파일은 xml형식의 파일이므로 태그로 작성하고 작성규칙이 정해져 있기 때문에 정확하게 작성해야 한다.

       web.xml 파일은 배포할때 서버가 참고해야 하는 내용을 정의해놓은 명세서이다.

 

        <  작성규칙 >

            dtd => xml안에서 정의하고 사용할 엘리먼트를 정의한 명세서( 엘리먼트의 순서, 값의 타입 등 .....) 

 

  •        서블릿 클래스를 등록
       => 어떤 클래스를 사용해야 하는지 등록 :  무엇을 사용할지???? 
          <servlet>
             <serlvet-name>  서블릿명(alias) </servlet-name>
             <serlvet-class> 서블릿의 실제 클래스명(패키지를 포함) </servlet-class> 
                                   페키지명 . 클래스명 
          </servlet> 

 

ex)  basic 패키지에 작성한 firstServlet을 first라는 이름의 서블릿명으로 등록 

 

        <servlet>
                 <servlet-name>first</servlet-name>
                  <servlet-class>basic.firstServlet</servlet-class>
       </servlet>

 

 

 

  • 서블릿 매핑

       => 등록된 서블릿을 어떻게 요청할 것인지 등록 ( 어떤 url로 요청할 것인지) 

       => 반드시 <servlet> 엘리먼트 다음에 위치해야 한다.

             즉, <servlet>엘리먼트와 함께 한 쌍으로 정의해야한다. 

 

       =>  <servlet-mapping>
                 <servlet-name>위에서 정의한 서블릿의 이름을 명시 </servlet-name>
                 <url-pattern>  요청할 서블릿의 path   </url-pattern>
            </servlet-mapping>

              

                ** 요청할 서블릿의 path는 반드시 / 나   . 으로 시작해야한다.

                    servlet name 중복 불가!