CodeGym/Java Course/모듈 3/서블릿 소개

서블릿 소개

사용 가능

1.1 인터페이스 서블릿

오늘 우리는 새롭고 흥미로운 주제인 서블릿을 시작합니다 . Java에 서블릿이 추가되면서 Java가 대규모 서버 응용 프로그램의 사실상의 표준이 되었습니다. 전 세계 모든 엔터프라이즈 소프트웨어의 80%는 Java로 작성됩니다. 그리고 중국에서는 모든 것이 100%입니다. 서블릿이란 무엇입니까?

서블릿은 정확히 Java 프로그램을 웹 서비스로 전환하고 클라이언트의 요청을 처리할 수 있도록 합니다. 그리고 이랬다...

90년대에는 World Wide Web이 등장한 직후 웹 클라이언트(브라우저)와 웹 서버가 등장했습니다. 웹 서버는 일반적으로 인터넷을 통해 저장한 파일(html 페이지, 스크립트, 그림 등)을 단순히 배포했습니다.

어느 시점에서 모두가 양쪽 모두를 더 똑똑하게 만드는 것이 필요하다는 결론에 도달했습니다. JavaScript가 HTML 페이지에 추가되었고 플러그인이 서버에 추가되었습니다. 특정 요청에 대한 응답으로 호출되어 서버의 동작을 보다 유연하고 스마트하게 만드는 특수 스크립트입니다.

따라서 서블릿은 특정 페이지에 대해 요청될 때 Java 코드를 실행할 수 있도록 내장되어 있는 Java 플러그인 입니다 . Java web-server그리고 이미 Servlet 클래스에서 상속된 클래스로 표시되는 이 Java 코드는 개발자가 의도한 대로 수행했습니다.

그리고 이미 알고 있듯이 가장 널리 사용되는 Java 웹 서버는 Tomcat 입니다 . 그건 그렇고, 만화 "Tom and Jerry"의 고양이 Tom을 기리기 위해 명명되었습니다.

Tomcat은 서블릿과 어떻게 상호 작용합니까? 실제로 이 프로세스는 표준화되어 있으며 서블릿 라이프 사이클 이라고 합니다 . 여기에서 서블릿은 로드 가능한 객체이고 웹 서버는 서블릿 컨테이너 입니다 .

서블릿이 아직 로드되지 않은 경우 다음을 수행합니다.

  1. 서블릿 클래스는 컨테이너에 의해 로드됩니다.
  2. 컨테이너는 서블릿 클래스(객체)의 인스턴스를 생성합니다.
  3. init()컨테이너는 서블릿 개체에서 메서드를 호출합니다 . 메서드는 한 번만 호출됩니다.

표준 작업 주기 - 클라이언트 요청 서비스 :

  • 각 요청은 별도의 스레드에서 처리됩니다.
  • service()컨테이너는 서블릿에서 메서드를 호출 하고 그곳에서 ServletRequest 및 ServletResponse 개체를 전달합니다.
  • destroy()서블릿을 종료하기 위해 서블릿 개체에서 메서드가 호출됩니다 . 한 번만 호출됩니다.

서블릿이 종료되는 데는 여러 가지 이유가 있을 수 있습니다.

  • 프로그래머가 웹 서버를 다시 시작하면 모든 서블릿을 정상적으로 종료해야 합니다.
  • 프로그래머는 서블릿의 새 버전을 로드하고 이전 버전은 올바르게 언로드해야 합니다.
  • 등등.

중요한 점을 기억하십시오. 웹 서버와 해당 서블릿은 장애 없이 작동하고 분당 수천 건의 요청을 처리하면서 몇 달 동안 다시 시작해야 합니다. 따라서 서블릿을 로드하고 작업하고 언로드하는 코드는 항상 매우 높은 품질로 작성되어야 합니다.

1.2 HttpServlet 클래스

서블릿 클래스는 서블릿과 컨테이너가 작동하는 방식을 표준화하기 위해 존재합니다. 프로그래머는 이 클래스와 직접 작업하지 않습니다. 글쎄, 그들은 거의 작동하지 않습니다. 가장 일반적으로 사용되는 클래스는 HttpServletServlet에서 상속됩니다.

이 클래스에는 우리에게 유용한 몇 가지 메서드가 있습니다. 다음과 같이 자주 사용합니다.

방법 설명
1 init() 서블릿이 로드될 때 한 번 호출됨
2 destroy() 서블릿이 언로드될 때 한 번 호출됨
service(HttpRequest, HttpResponse) 서블릿에 대한 모든 새 요청에 대해 호출됨
4 doGet(HttpRequest, HttpResponse) 서블릿에 대한 모든 새로운 GET 요청에 대해 호출됨
5 doPost(HttpRequest, HttpResponse) 서블릿에 대한 모든 새로운 POST 요청에 대해 호출됨
6 doHead(HttpRequest, HttpResponse) 서블릿에 대한 모든 새로운 HEAD 요청에 대해 호출됨
7 doDelete(HttpRequest, HttpResponse) 서블릿에 대한 모든 새로운 DELETE 요청에 대해 호출됨
8 doPut(HttpRequest, HttpResponse) 서블릿에 대한 모든 새 PUT 요청에 대해 호출됨

init()및 메소드는 destroy()Servlet 클래스에서 상속됩니다. 따라서 서블릿에서 재정의하기로 결정한 경우 기본 클래스에서 해당 구현을 호출해야 합니다. 이 명령이 사용됩니다 super.method name().

서블릿 예:

public class FirstHttpServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // Getting the parameter “secret” from request
        String secret = request.getParameter("secret");

        // Put parameter “secret” into Http-session
        HttpSession session = request.getSession(true);
        session.setAttribute("secret", secret);

        // Print HTML as response for browser
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Header</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet example "+ secret +"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}

1.3 서비스(HttpServletRequest, HttpServletResponse) 메소드

서블릿의 관점에서 클라이언트 요청 처리를 살펴보면 다음과 같습니다.

각 클라이언트 요청에 대해 컨테이너(웹 서버)는 개체를 생성한 HttpServletRequest다음 HttpServletResponse해당 service(HttpServletRequest request, HttpServletResponse response)서블릿에서 메서드를 호출합니다. 이러한 개체는 메서드가 필요한 데이터를 가져오고 request작업 결과를 에 넣을 수 있도록 전달됩니다 response.

이 메서드에는 service()기본 구현이 있습니다. 재정의하지 않으면 실행됩니다. 그것이 그가 하는 일입니다.

메서드는 service()요청(GET, POST, ...)에서 HTTP 메서드 유형을 결정하고 요청에 해당하는 메서드를 호출합니다.

방법 설명
1 service(HttpRequest, HttpResponse) 서블릿에 대한 모든 새 요청에 대해 호출됨
2 doGet(HttpRequest, HttpResponse) 서블릿에 대한 모든 새로운 GET 요청에 대해 호출됨
doPost(HttpRequest, HttpResponse) 서블릿에 대한 모든 새로운 POST 요청에 대해 호출됨
4 doHead(HttpRequest, HttpResponse) 서블릿에 대한 모든 새로운 HEAD 요청에 대해 호출됨
5 doDelete(HttpRequest, HttpResponse) 서블릿에 대한 모든 새로운 DELETE 요청에 대해 호출됨
6 doPut(HttpRequest, HttpResponse) 서블릿에 대한 모든 새 PUT 요청에 대해 호출됨

클래스에서 하나의 메서드를 재정의하거나 service()그대로 두고 필요에 따라 메서드 doGet(), , ...를 재정의할 수 있습니다.doPost()

코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다