Java 서블릿이란 무엇입니까?


277

Java 서블릿을 이해하기 위해 많은 기사를 읽었지만 성공하지 못했습니다.

Java 서블릿 (간단한 언어)에 대해 간략하게 소개해 주시겠습니까? 서블릿이란 무엇입니까? 장점은 무엇입니까? 그리고 그 모든 것.

서버 측 프로그래밍 언어 (PHP, ASP)와 서블릿의 차이점을 이해할 수 없습니다.


38
servlets블랙 박스가 나타날 때까지 질문 아래 의 태그를 가리 킵니다 . 정보 링크를 클릭하십시오 .
BalusC

1
서블릿 당신은 그것을 볼 수 있습니다. 나는 이것이 세부적이고 정통적이라고 생각합니다.
shohan

답변:


336

서블릿은 단순히 특정 유형의 네트워크 요청 (일반적으로 HTTP 요청)에 응답하는 클래스입니다. 기본적으로 서블릿은 일반적으로 웹 애플리케이션을 구현하는 데 사용되지만 서블릿 (예 : Struts)에서 작동하는 서블릿보다 "HTTP 요청,이 HTTP 응답에 쓰기"레벨보다 높은 수준의 추상화를 제공하는 다양한 프레임 워크도 있습니다. 제공하십시오.

서블릿 은 네트워킹 측면을 처리 하는 서블릿 컨테이너 에서 실행됩니다 (예 : HTTP 요청 구문 분석, 연결 처리 등). 가장 잘 알려진 오픈 소스 서블릿 컨테이너 중 하나는 Tomcat 입니다.


16
서블릿은 웹 서버 자체 에서 웹 서버에 의해 호출되는 Java 코드 스 니펫입니다 . PHP 나 ASP와 같은 것을 원한다면 JSP (특별한 종류의 서블릿)가 필요하다
Thorbjørn Ravn Andersen

3
답변은 고맙지 만 여전히 서블릿을 실제로 사용할 수는 없지만 서블릿을 사용할 수있는 상황과 같은 예로 설명 할 수 있다면 더 좋습니다. 다른 서버 측 프로그래밍 언어로는 할 수없는 서블릿과 같은 서블릿의 사용을 이해하지 못했습니다.
hardik

4
@Hardik : 다른 방법으로는 할 수없는 일을 할 수있는 것이 아닙니다. 서블릿은 서버 측 Java 작업을위한 일반적인 기술입니다. 서블릿은 언어가 아니며 ASPX도 아닙니다. 둘 다 다른 언어 (일반적으로 서블릿의 경우 Java)와 함께 사용하는 플랫폼입니다.
Jon Skeet

7
@Hardik : 필자가 작성한 글에서 서블릿은 서블릿 컨테이너 내부에서 작동하는 클래스입니다. 서블릿 컨테이너는 여러 서블릿을 동시에 호스팅 할 수 있습니다.
Jon Skeet

5
@Hardik : 그렇습니다. 서블릿은 HTML을 제공하여 양식을 표시하고 제출에도 영향을 줄 수 있습니다. 서블릿을 사용하여 웹 서비스를 구현할 수도 있습니다. 그들은 제외하고 HTTP에서 다른 프로토콜에 사용되지만 HTTP 압도적으로 서블릿에 의해 처리하는 가장 일반적인 전송합니다.
Jon Skeet

102

그 핵심의 서블릿은 자바 클래스입니다. HTTP 요청을 처리 할 수 ​​있습니다. 일반적으로 유선을 통한 HTTP 요청 및 응답을 읽는 내부적으로는 Tomcat과 같은 컨테이너가 처리합니다. 이는 서버 측 개발자로서 HTTP 요청 및 응답으로 수행 할 작업에 집중할 수 있고 네트워킹 등을 다루는 코드를 처리하는 데 신경 쓰지 않기 위해 수행됩니다. 컨테이너는 전체를 HTTP 응답 객체를 클라이언트에게 보냅니다 (예 : 브라우저).

다음으로 물어볼 논리적 질문은 누가 컨테이너가 무엇을해야하는지 결정하는 것입니다. 대답은 다음과 같습니다. Java 세계에서는 적어도 사양에 따라 안내됩니다 (주석이라는 단어는 사용하지 않았습니다). 예를 들어 서블릿 스펙 (자원 2 참조)은 서블릿이 수행 할 수있는 작업을 나타냅니다. 따라서 사양에 대한 구현을 작성할 수 있다면 컨테이너를 만들었습니다. Tomcat과 같은 기술 컨테이너는 다른 사양을 구현하고 사용자 정의 클래스 로더와 같은 까다로운 작업을 수행하지만 아이디어를 얻습니다.

컨테이너가 있다고 가정하면 서블릿은 이제 컨테이너에서 라이프 사이클을 유지 관리하는 Java 클래스이지만 들어오는 HTTP 요청에 대한 반응은 사용자가 결정합니다. init (), doGet (), doPost () 등과 같은 사전 정의 된 메소드에 수행 할 작업을 작성하여이를 수행하십시오. 자원 3을보십시오.

다음은 재미있는 운동입니다. Resource 3에서와 같이 간단한 서블릿을 만들고 생성자 메소드에 몇 개의 System.out.println () 문을 작성하십시오 (예 : 서블릿의 생성자를 가질 수 있음), init (), doGet (), doPost () 메소드 및 실행 바람둥이의 서블릿. 콘솔 로그 및 Tomcat 로그를 참조하십시오.

이것이 도움이되기를 바랍니다. 행복한 학습.

자원

  1. HTTP 서블릿이 어떻게 보이는지 보십시오. (Tomcat 예제).

  2. 서블릿 사양 .

  3. 간단한 서블릿 예제 .

  4. 온라인 / PDF 읽기 시작 또한 전체 책을 다운로드 할 수 있습니다. 도움이 될 수 있습니다. 서블릿을 시작하는 경우 서블릿 API와 함께 자료를 읽는 것이 좋습니다. 학습 과정이 느리지 만 기초를 명확하게하는 데 더 도움이됩니다.


12
링크 오버로드에서는 링크 전용 응답이 권장되지 않습니다. 링크 된 리소스는 나중에 사용할 수 없게되거나 변경 될 수 있기 때문입니다. 답변을 개선하려면 링크의 관련 내용을 요약하십시오.

6
@Cupcake는 건설적인 피드백에 감사드립니다. 나는 대답에 고기를 추가하려고했습니다. 커뮤니티를 개선해 주셔서 감사합니다.
Ayusman

34

위의 것 외에도 출혈의 명백한 점을 지적하면 ...

많은 사람들에게 이것은 명백한 것이지만, 누군가가 방금 실행 한 다음 종료하는 앱을 작성하는 데 익숙한 사람에게는 서블릿이 대부분의 시간을 아무것도하지 않고 보낸 것입니다 ... 무언가를 기다리고, 요청한 다음 응답 . 이러한 이유로 서블릿은 수명이 있습니다. 서블릿은 초기화 된 후 주변에서 대기 한 후 해당 항목에 응답 한 후 소멸됩니다. 이는 다른 것 (프레임 워크)에 의해 생성되고 나중에 파괴되어야하며 자체 스레드 또는 프로세스에서 실행되며 요청되지 않는 한 아무것도하지 않음을 의미합니다. 또한 어떤 방법 으로든이 "엔티티"가 요청을 "들어 볼"수있는 메커니즘을 구현해야합니다.

스레드, 프로세스 및 소켓에 대한 독서는 이것에 약간의 빛을 던질 것을 제안합니다. 기본 "hello world"앱 기능과는 상당히 다릅니다.

"서버"또는 "서블릿"이라는 용어는 약간 과잉이라고 주장 할 수 있습니다. 보다 합리적이고 단순한 이름은 "응답자"일 수 있습니다. "서버"라는 용어를 선택하는 이유는 역사적입니다. 첫 번째 이러한 구성은 "파일 서버"였습니다. 여기서 여러 사용자 / 클라이언트 터미널이 중앙 시스템에서 특정 파일을 요청하면이 파일이 "서비스됩니다" "책이나 피쉬 앤 칩스 접시처럼.


1
표준 MVC 프레임 워크에서 서블릿을 "컨트롤러"와 유사한 것으로 보는 것이 올바르지 않습니까?
user2490003

개인적으로 나는 그 비유가 어떻게 유지되는지 볼 수 없습니다. 나는 또한 내 대답이 유용한 것이라고 생각하는 사람들은 (그들을 위해 물건을 명확히하는 데 도움이 됨) 당신의 제안에 혼란 스러울 것이라고 생각하는 경향이 있습니다.
마이크 설치류

이 답변이 유용하다고 생각합니다. 그러나 나는 또한 (이 답변과 독립적이며, 그것을 읽기 전에) @ user2490003이 위에서 제기 한 것과 같은 질문을 궁금해했습니다. 서블릿과 MVC 프레임 워크 컨트롤러의 차이점은 무엇입니까? user2490003의 비유가 왜 유지되지 않습니까?
cellepo

MVC 배열은 더 복잡하지만 덜 복잡합니다. 입력 대기를 반드시 포함 할 필요는 없습니다. 서버-클라이언트 설정의 기본 개념을 정의 할 때 강조하고자하는 것이 단순성입니다. 기본 MVC 다이어그램을보십시오 : en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller . 간단한 클라이언트-서버 설정에서 사용자는 두 개의 개체, 즉보기와 컨트롤러가 아닌 클라이언트와 만 상호 작용합니다. MVC를 사용하면 여러보기, 여러 컨트롤러 및 여러 모델이있을 수도 있습니다. 그리고 입력을 기다리는 것은 (필수적으로) 필요하지 않습니다.
마이크 설치류

위의 것 외에도 서버는 여러 사용자에게 서비스를 제공 할 수 있지만 MVC 설정에는 이러한 요구 사항이 없습니다. MVC 설정은 클래식 컴퓨팅, 즉 독립형 앱의 세계에 속합니다. 서버를 통해 대화 형 컴퓨팅의 세계로 첫 발을 내딛습니다. 유추가 100 % 잘못되고, 90 % 더 잘못되었다는 것은 아니며, 무엇보다도 누군가 또는 어떤 식 으로든 실제로 도움이되지 않는다면 유추가 아무 소용이 없다는 것입니다. 서버-클라이언트 배열은 매우 단순하므로 아무도 이해하기 위해 어떤 종류의 유추도 필요하지 않다 .
마이크 설치류

10

서블릿이란 무엇입니까?

  • 서블릿은 단순히 특정 유형의 네트워크 요청 (일반적으로 HTTP 요청)에 응답하는 클래스입니다.
  • 기본적으로 서블릿은 일반적으로 웹 애플리케이션을 구현하는 데 사용되지만 서블릿 (예 : Struts)에서 작동하는 서블릿보다 "HTTP 요청,이 HTTP 응답에 쓰기"레벨보다 높은 수준의 추상화를 제공하는 다양한 프레임 워크도 있습니다. 제공하십시오.
  • 서블릿은 네트워킹 측면을 처리하는 서블릿 컨테이너에서 실행됩니다 (예 : HTTP 요청 구문 분석, 연결 처리 등). 가장 잘 알려진 오픈 소스 서블릿 컨테이너 중 하나는 Tomcat입니다.

  • 요청 / 응답 패러다임에서 웹 서버는 정적 페이지 만 클라이언트에게 제공 할 수 있습니다.

  • 동적 페이지를 제공하려면 서블릿이 필요합니다.
  • 서블릿은 자바 프로그램 일 뿐이다
  • 이 Java 프로그램에는 기본 방법이 없습니다. 콜백 메소드 만 있습니다.
  • 웹 서버는 서블릿과 어떻게 통신합니까? 컨테이너 또는 서블릿 엔진을 통해.
  • 서블릿은 웹 컨테이너 내에서 살고 죽습니다.
  • 웹 컨테이너는 서블릿에서 메소드를 호출합니다. 서블릿이 가지고있는 콜백 메소드를 알고 있습니다.

요청의 흐름

  • 클라이언트가 웹 서버에 HTTP 요청을 보냅니다.
  • 웹 서버는 해당 HTTP 요청을 웹 컨테이너로 전달합니다.
  • 서블릿은 Java 프로그램 인 HTTP를 이해할 수 없으므로 오브젝트 만 이해하므로 웹 컨테이너는 해당 요청을 유효한 요청 오브젝트로 변환합니다.
  • 웹 컨테이너는 각 요청에 대해 스레드를 회전시킵니다.
  • 모든 비즈니스 로직은 서블릿 내부의 doGet () 또는 doPost () 콜백 메소드로 이동합니다.
  • 서블릿은 Java 응답 오브젝트를 빌드하여 컨테이너로 보냅니다. 클라이언트로 전송하기 위해 HTTP 응답으로 다시 변환합니다.

컨테이너는 어떤 Servlet 클라이언트가 요청했는지 어떻게 알 수 있습니까?

  • web.xml이라는 파일이 있습니다
  • 이것은 웹 컨테이너의 마스터 파일입니다.
  • 이 파일에는 서블릿에 대한 정보가 있습니다.

    • 서블릿
      • 서블릿 이름
      • 서블릿 클래스
    • 서블릿 매핑 -/ Login 또는 / Notifications와 같은 경로가 여기에 매핑됩니다.
      • 서블릿 이름
      • URL 패턴
    • 등등
  • 웹앱의 모든 서블릿에는이 파일에 항목이 있어야합니다.

  • 따라서이 조회는 url-pattern-> servlet-name-> servlet-class와 같이 발생합니다.

서블릿을 "설치"하는 방법? 서블릿 객체는 라이브러리 javax.servlet. *에서 상속받습니다. Tomcat과 Spring은 이러한 객체를 활용하여 사용 사례에 맞출 수 있습니다.

Ref- 1.5x- https://www.youtube.com/watch?v=tkFRGdUgCsE 에서 확인 하십시오 . 이것은 멋진 설명이 있습니다.


1
솔루션에 대한 링크는 환영하지만 답변없이 유용한 답변을 얻으십시오 . 링크 주위에 컨텍스트를 추가 하여 동료 사용자가 그 이유와 그 이유를 파악한 다음 페이지의 가장 관련성이 높은 부분을 인용하십시오. 대상 페이지를 사용할 수없는 경우 다시 연결 링크 이상인 답변은 삭제 될 수 있습니다.
Mogsdad

1
세계는 계속 움직였다. 2020 년에 XML의 중앙 문자열 기반 구성 파일 대신 코드에 주석을 사용합니다.
Thorbjørn Ravn Andersen

5

서블릿은 동적 웹 페이지 를 만드는 데 사용되는 서버 측 기술입니다 . 웹 애플리케이션에서 . 실제로 서블릿은 몇 가지 기능을 가진 클래스와 인터페이스 그룹으로 구성된 API입니다. 서블릿 API를 사용하면 서블릿 클래스 및 인터페이스의 사전 정의 된 기능을 사용할 수 있습니다.

서블릿의 수명주기 :

웹 컨테이너는 서블릿 인스턴스의 수명주기를 유지합니다.

1 . 서블릿 클래스가로드 됨

2. 서블릿 인스턴스 생성

삼 . init () 메소드가 호출됩니다

4. service () 메소드 호출

도 5. destroy () 메소드 호출

클라이언트 (브라우저)에 의해 요청이 제기되면 웹 컨테이너는 서블릿이 실행 중인지 여부를 확인한 다음 예인 경우 service () 메소드를 호출하고 브라우저에 응답을 제공합니다.

서블릿이 실행 중이 아닌 경우 웹 컨테이너는 다음 단계를 수행하십시오.

1. 클래스 로더는 서블릿 클래스를로드

2. 서블릿을 인스턴스화

3. 서블릿을 초기화

4. service () 메소드 호출

요청 웹 컨테이너를 제공 한 후 특정 시간 동안 기다립니다.이 시간에 요청이 들어 오면 service () 메소드 만 호출하고 그렇지 않으면 destroy () 메소드를 호출합니다.


5

초보자라면이 튜토리얼에서 Servlet이 무엇인지 에 대한 기본 아이디어를 얻을 수 있다고 생각합니다 .

주어진 링크에서 아래에 몇 가지 중요한 사항이 있습니다.

서블릿 기술은 서버 측에 상주하고 동적 웹 페이지를 생성하는 웹 애플리케이션을 작성하는 데 사용됩니다.

서블릿은 컨텍스트에 따라 여러 가지 방법으로 설명 될 수 있습니다.

  • 서블릿은 웹 응용 프로그램을 만드는 데 사용되는 기술입니다.
  • 서블릿은 문서를 포함하여 많은 인터페이스와 클래스를 제공하는 API입니다.
  • 서블릿은 서블릿을 생성하기 위해 구현해야하는 인터페이스입니다.
  • 서블릿은 서버의 기능을 확장하고 들어오는 요청에 응답하는 클래스입니다. 모든 유형의 요청에 응답 할 수 있습니다.
  • 서블릿은 서버에 배포되어 동적 웹 페이지를 생성하는 웹 구성 요소입니다. 참조 : 여기 .

1
기본 개념을 설명하는 훌륭한 튜토리얼입니다.
Nikhil Sahu

3

Java 서블릿은 서버 측 Java 프로그램 모듈로 고객 요구를 처리하고 응답하고 서블릿 인터페이스를 실현합니다. 무시할 수있는 오버 헤드, 유지 및 지원으로 웹 서버 유용성을 향상시키는 데 도움이됩니다.

서블릿은 고객과 서버 사이의 중개자 역할을합니다. 서블릿 모듈이 서버에서 계속 실행되면서 고객의 요구에 부응 할 수 있습니다. 서블릿의 요구 및 반응 오브젝트는 HTTP 요청을 처리하고 고객에게 컨텐츠 정보를 다시 보내는 유용한 방법을 제공합니다.

서블릿은 Java 언어와 조정되므로, 높은 이동성, 스테이지 자율성, 보안 및 Java 데이터베이스 가용성과 같은 모든 Java 하이라이트가 추가로 있습니다.


2

서블릿은 HTTP 요청에 응답하고 HTTP 응답을 생성하는 Java 클래스입니다. HTML을 사용하여 페이지를 만들 때 정적 페이지가되어 동적으로 만들려면 SERVLET { JSP는 서블릿을 사용하기 위해 코드와 HTML 태그를 자체적으로 사용합니다.


2

서블릿은 웹 사이트 사용자가 서버에서 URL을 요청할 때 특정 기능을 실행하는 Java 클래스입니다. 이러한 함수는 데이터베이스에 데이터 저장, 논리 실행 및 페이지로드에 필요한 정보 (JSON 데이터 등) 반환과 같은 작업을 완료 할 수 있습니다.

대부분의 Java 프로그램 main()은 프로그램이 실행될 때 코드를 실행 하는 메소드를 사용 합니다. 자바 서블릿 포함 doGet()하고 doPost()단지처럼 행동 방법main() 됩니다. 이 기능은 사용자가 해당 서블릿에 매핑 된 URL을 요청 GET하거나 POST요청할 때 실행됩니다 . 따라서 사용자는 GET요청에 대한 페이지를로드 하거나POST .

사용자가 GET또는POST 요청을 서버는 @WebServlet디렉토리의 각 서블릿 클래스 상단에서를 읽고 어떤 서블릿 클래스를 호출할지 결정합니다. 예를 들어 ChatBox 클래스가 있고 맨 위에이 클래스가 있다고 가정 해 보겠습니다.

@WebServlet("/chat")
public class ChatBox extends HttpServlet {

사용자가 /chatURL을 요청하면 ChatBox클래스가 실행됩니다.


0

이 기사에서 설명하는 것처럼 서블릿은 Java 서버를 확장하고 해당 기능에 액세스하는 표준화 된 방법입니다.

각 서블릿은 작은 서버 (따라서 이름)로 볼 수 있으며, 세션과 같은 다른 컨텍스트 데이터와 함께 Java 코드로 모델링 된 요청 및 응답에 액세스 할 수 있습니다.

이 기능을 사용하면 서블릿의 Java 코드는 HTML보기 생성을위한 JSP 페이지로의 전달을 포함하여 응답을 렌더링하는 데 필요한 모든 것과 인터페이스 할 수 있습니다.


-1

서블릿은 기본적으로 HTTP 요청과 HTTP 응답 사이의 중간 역할을하는 Java 클래스라고 생각합니다. 서블릿은 웹 페이지를 동적으로 만드는데도 사용됩니다. 예를 들어 서버의 다른 웹 페이지로 리디렉션하려는 경우 서블릿을 사용해야한다고 가정하십시오. 또 다른 중요한 점은 서블릿이 웹 브라우저뿐만 아니라 로컬 호스트에서도 실행될 수 있다는 것입니다.


-2

일반적으로 서블릿에 대한 답변을 얻었습니다. 그러나 Servlet 3.0에 대해 이야기하고 싶습니다.

먼저 서블릿이란 무엇입니까?

서블릿은 컨테이너가 관리하고 동적 컨텐츠를 생성하는 웹 구성 요소입니다. 서블릿은 바이트 코드로 컴파일 된 Java 클래스로, Java 기술 지원 웹 서버 또는 서블릿 컨테이너에 동적으로로드되어 실행될 수 있습니다.

Servlet 3.0은 기존 Servlet 2.5 사양에 대한 업데이트입니다. Java Platform, Enterprise Edition 6의 Servlet 3.0 필수 API Servlet 3.0은 확장 성 및 웹 프레임 워크 플러그 가능성에 중점을 둡니다. Servlet 3.0은 EoD (Ease of Development), 플러그 기능, 비동기 지원 및 보안 향상과 같은 일부 확장을 제공합니다.

개발의 용이성

서블릿, 필터, 리스너, 초기화 매개 변수를 선언 할 수 있으며 주석을 사용하여 거의 모든 것을 구성 할 수 있습니다.

플러그 가능성

web-fragment.xml을 사용하여 하위 프로젝트 또는 모듈을 만들 수 있습니다. 플러그 가능 기능 요구 사항을 독립적으로 구현할 수 있음을 의미합니다.

비동기 지원

Servlet 3.0은 비동기 처리 기능을 제공합니다 (예 : 자원 사용 가능 대기, 비동기식 응답 생성).

보안 강화

인증, 로그인 및 로그 아웃 서블릿 보안 방법 지원

Java Servlet Tutorial 에서 찾았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.