[java] 서블릿과 웹 서비스의 차이점

이 2 개의 차이점은 무엇입니까? 나는 Google에서 결정적인 결과를 거의 찾지 못했습니다.

다음은 후속 질문입니다.

@Controller 주석을 사용하여 몇 개의 클래스에 주석을 달고 Spring mvc 웹 앱을 만들고 프런트 엔드-> 백 엔드에서 일부 정보를 성공적으로 전송하고 그 반대의 경우에도 일부 데이터베이스가 백 엔드 측에 포함될 수 있습니다.

그걸 뭐라고 부르 겠어요? 나머지 웹 서비스 또는 서블릿 또는 다른 무엇입니까?



답변

웹 서비스는 나머지 프로그래밍 패러다임이나 통신을위한 SOAP 프로토콜을 사용하여 고객에 대한 서비스 방법을 제공하는 서비스입니다. 웹 서비스를 구현하는 방법에는 여러 가지가 있습니다. 웹 서비스를 작성하는 가장 간단한 방법은 클래스를 작성하고에서 @WebService@WebMethod주석으로 주석을 단 javax.jws다음 다음을 사용하여 main-method 에서 시작하는 것입니다.

Endpoint.publish("http://localhost:8089/myservice", new MyWebService());

그 결과 등록 된 URL에서 WSDL 을 볼 수 있으며 SoapUI 또는 다른 SOAP 클라이언트가있는 경우 웹 서비스를 테스트하고 사용할 수도 있습니다.

반면에 서블릿HTTP 요청 및 응답 을 전송하는 데 사용됩니다 . JSP 및 HTML을 사용하여 웹 애플리케이션을 작성하거나 RESTful 서비스 에서처럼 XML 및 JSON 응답을 제공하고 SOAP 메시지를 수신 및 반환하는 데 사용할 수 있습니다. 웹 서비스 아래의 하나의 계층 으로 생각할 수 있습니다 . 서블릿에는 현재 Java 서블릿 사양 버전 4.0 인 자체 표준이 있습니다.

보다 포괄적이고 실용적인 접근 방식은 프레임 워크로 웹 서비스를 작성하고이를 Tomcat 또는 JBoss와 같은 애플리케이션 서버 또는 서블릿 컨테이너에 게시하는 것입니다. 이 경우 서블릿을 사용하여 SOAP 또는 REST 메시지를 전송하는 HTTP 요청의 전송을 처리합니다.

서블릿 기술로 웹 서비스를 작성하려면 예를 들어 JAX-WS (예 : SOAP)를 사용할 수 있습니다. RESTful 서비스를 작성하기 위해 JAX-RS (참조 구현이 Jersey )를 사용하거나 또는 Spring WebMVC를 사용할 수 있지만 내가 아는 한 이것이이 프레임 워크의 주요 목적이 아니며 Jersey는 상당히 사용하기 쉽습니다.

두 번째 질문과 관련하여 주석은 Spring에 대해 Bean이 수행해야하는 작업에 대해 알려주 @ControllerSpring 특정 스테레오 타입 주석입니다. 컨트롤러의 메소드가 정확히 무엇을 반환할지는 메소드의 실제 구현에 따라 다르며, 일반 텍스트, HTML, JSON, XML, 바이너리 데이터 또는 원하는 것을 반환하도록 Spring을 구성 할 수 있습니다.

주석이 달린 클래스 @Controller는 아직 서블릿이 아니며 단순히 빈입니다. 서블릿을 사용하는 방법은 주로 사용하는 프레임 워크에 따라 다릅니다. 예를 들어, Spring을 사용할 때 서블릿 작업은 Springs에 의해 수행되며 DispatcherServlet요청을 올바른 Bean으로 전달합니다. Tomcat을 사용하는 경우 클래스를 서브 클래 싱하고 브라우저의 HTTP GET 요청에 응답하는 javax.servlet.http.HttpServlet것과 같은 필요한 메소드를 덮어 쓰는 것만으로 자신 만의 서블릿을 직접 작성할 수 있습니다 doGet.


답변

당신이 설명하는 것은 인간이 브라우저를 사용하여 소프트웨어 시스템과 상호 작용 하는 웹 애플리케이션 입니다.

웹 서비스는 소프트웨어 시스템이 포함 된 어떤 인간 않고, HTTP와 XML 또는 JSON 사용하여 서로 통신 할 수있는 방법입니다.

서블릿은 HTTP 요청에 응답하는 소프트웨어를 작성하는 자바 특정의 방법입니다. Spring MVC는 웹 애플리케이션을 더 쉽게 작성하기 위해 많은 구현 세부 사항을 추상화하지만 내부적으로 서블릿을 사용합니다.


답변

내 생각은 웹 서비스가 일부 비즈니스 특정 기능과 같은 더 높은 수준의 추상화를 정의한다는 것입니다. Servlet은 데이터 전송을 담당하는 소프트웨어 구현 구성 요소 일뿐입니다.

웹 서비스 구현은 일반적으로 데이터 수신을 위해 서블릿에 의존합니다. 그러나 프로토콜 데이터를 처리하는 사용자 지정 계층을 사용할 수도 있습니다.

@Controller는 아마도 전송을 구현하는 방법 인 서블릿보다 웹 서비스와 더 관련이있을 것입니다.


답변

서블릿과 웹 서비스의 가장 분명한 차이점은 HTTP를 통해 서블릿에 액세스하고 SOAP (Simple Object Access Protocol)를 통해 웹 서비스에 액세스한다는 것입니다. 그러나 실제로 서블릿을 직접 호출 할 수는 없으며 호출자가 응용 프로그램을 벗어난 경우 URL 연결을 열고 서블릿에 일부 매개 변수를 넣을 수만 있습니다. 그리고 호출자가 넣을 수있는 매개 변수를 제한 할 수 없습니다. 호출자는 서블릿이받을 수있는 매개 변수를 알지 못합니다. 따라서 웹 서비스를 사용하여 다른 애플리케이션에 API를 제공하는 것이 좋습니다. 웹 서비스의 WSDL 파일은 호출자에게 웹 서비스를 호출하기에 충분한 정보를 제공 할 수 있습니다.


답변

서블릿은 HTTP 쿼리 핸들러입니다. 들어오는 쿼리로 원하는 것을 할 수 있습니다. JVM에서 실행되는 서블릿.

웹 서비스는 다소 엄격한 프로토콜에 연결되어 있습니다. 인터페이스 (API)는 사용 가능한 메서드와 해당 인수 및 서비스에 대한 반환 값으로 정의됩니다.

이 인터페이스는 프로토콜 메커니즘을 사용하여 노출됩니다. 이러한 프로토콜은 서비스를 실행할 호스트에 대해 알 수 없습니다. PHP, Java, C # 또는 사용자 고유의 언어를 사용하여 동일한 웹 서비스를 정의 할 수 있습니다. 프로토콜에 대한 쿼리를 이해하고 클라이언트가 읽을 수있는 답변을 생성 할 수있는 코드 조각 만 있으면됩니다.

예를 들어 SOAP 는 웹 서비스 프로토콜입니다. Wikipedia 정의 :

원래 Simple Object Access Protocol로 정의 된 SOAP는 컴퓨터 네트워크에서 웹 서비스를 구현할 때 구조화 된 정보를 교환하기위한 프로토콜 사양입니다.


답변

웹 서비스는 서블릿보다 높은 수준에서 작동합니다. 서블릿은 간단하고 서버 측 구성 요소를 작성하는 기능을 제공하는 API입니다.

예를 들어 RESTfull은 서블릿과 함께 다른 많은 “기능”을 포함하는 웹 서비스입니다. 배포하기 위해 web.xml을 다음과 같이 정의 할 수 있습니다.

<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>jersey.rest.test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>

이것은 단지 서블릿입니다.


답변

웹 서비스는 요청을 깔끔하고 구조화 된 방식으로 처리하는 Servlet 클래스 인 ServletContainer 클래스를 사용합니다. REST는 REpresentational STateless Protocol을 나타냅니다. 여기서 요청은 데이터를 저장하지 않습니다.

REST 웹 서비스는 HTTP 메소드를 지원합니다.

  1. GET- 일반적으로 데이터를 가져옵니다.
  2. POST- 새 개체를 삽입합니다.
  3. PUT- 기존 개체를 업데이트합니다.
  4. DELETE- Object를 삭제합니다.

모든 유형의 HTTP 메서드를 가질 수있는 웹 서비스 클래스에 원하는 수의 URL을 매핑 할 수 있습니다.

반면에 각 서블릿에 대해 하나의 URL 매핑 만 수행 할 수 있습니다. 요청 매개 변수 조건의 도움으로 최종 요구 사항을 달성 할 수 있지만 요즘에는 서블릿을 사용하면 깨끗한 방법을 제공하지 않습니다.

웹 서비스에서 우리는 클래스 수준메서드 수준 에서 URL 경로를 정의 할 수 있으므로 보다 구조화 된 방식으로 코딩 할 수 있습니다.