Programing

Spring의 디스패처 서블릿은 무엇입니까?

crosscheck 2020. 5. 23. 10:09
반응형

Spring의 디스패처 서블릿은 무엇입니까?


이 이미지 ( 여기 에서 얻은 )에서 HTTP 요청은 Dispatcher Servlet으로 무언가를 보냅니다 .

여기에 이미지 설명을 입력하십시오

내 질문은 Dispatcher Servlet의 기능 은 무엇입니까?

웹 페이지에서 정보를 가져 와서 컨트롤러에 던지는 것과 같은 것입니까?


DispatcherServlet 의 작업은 수신 URI를 가져와 해당 위치에서 발견되는 페이지 또는 자원을 구성하기 위해 결합 된 핸들러 (일반적으로 Controller 클래스의 메소드 ) 및보기 (일반적으로 JSP) 의 올바른 조합을 찾는 것입니다 .

나는

  • 파일 /WEB-INF/jsp/pages/Home.jsp
  • 수업에 대한 방법

    @RequestMapping(value="/pages/Home.html")
    private ModelMap buildHome() {
        return somestuff;
    }
    

디스패처 서블릿이 "인식"비트입니다 브라우저가 페이지를 요청하면 그 메소드를 호출하고, HTML 문서를 만들기 위해 일치하는 JSP 파일과 그 결과를 결합 할 수 있습니다.

이를 수행하는 방법은 구성 및 Spring 버전에 따라 크게 다릅니다.

최종 결과가 웹 페이지 여야하는 이유도 없습니다. RMI 엔드 포인트 를 찾고 SOAP 요청을 처리 하는 것과 동일한 작업을 수행 할 수 있습니다.


Spring MVC에서 모든 들어오는 요청은 단일 서블릿을 통과합니다. 이 서블릿- DispatcherServlet은 프론트 컨트롤러입니다. 프론트 컨트롤러는 웹 애플리케이션 개발에서 일반적인 디자인 패턴입니다. 이 경우 단일 서블릿은 모든 요청을 수신하여 애플리케이션의 다른 모든 컴포넌트로 전송합니다.

의 임무 DispatcherServlet는 특정 Spring MVC 컨트롤러에 요청을 보내는 것입니다.

일반적으로 많은 컨트롤러가 있으며 DispatcherServlet대상 컨트롤러를 결정하기 위해 다음 맵퍼 중 하나를 참조합니다.

어떤 구성이 수행되지 않으면 DispatcherServlet사용 BeanNameUrlHandlerMapping하고 DefaultAnnotationHandlerMapping기본적으로합니다.

대상 컨트롤러가 식별되면 DispatcherServlet요청을 보냅니다. 컨트롤러는 요청에 따라 일부 작업을 수행하거나 다른 객체에 위임 DispatcherServlet하고 Model 및 View 이름을 사용하여 다시 작업을 수행합니다 .

보기의 이름은 논리적 이름 일뿐입니다. 그런 다음이 논리적 이름을 사용하여 실제보기를 검색합니다 (컨트롤러 및 특정보기와의 연결을 피하기 위해). 그런 DispatcherServlet다음를 참조 ViewResolver하고 뷰의 논리적 이름을 뷰의 특정 구현에 매핑합니다.

가능한 구현은 다음 ViewResolver과 같습니다.

언제 DispatcherServlet그것을 응답으로 렌더링되는 결과가 표시보기를 판정한다.

마지막으로, 객체를 다시 클라이언트로 DispatcherServlet반환합니다 Response.


DispatcherServletSpring MVC의 프론트 컨트롤러 패턴 구현입니다 .

Spring 문서에 대한 설명은 here을 참조 하십시오 .

Essentially, it's a servlet that takes the incoming request, and delegates processing of that request to one of a number of handlers, the mapping of which is specific in the DispatcherServlet configuration.


I know this question is marked as solved already but I want to add a newer image explaining this pattern in detail(source: spring in action 4):

여기에 이미지 설명을 입력하십시오

Explanation

When the request leaves the browser (1), it carries information about what the user is asking for. At the least, the request will be carrying the requested URL. But it may also carry additional data, such as the information submitted in a form by the user.

The first stop in the request’s travels is at Spring’s DispatcherServlet. Like most Java- based web frameworks, Spring MVC funnels requests through a single front controller servlet. A front controller is a common web application pattern where a single servlet delegates responsibility for a request to other components of an application to per- form actual processing. In the case of Spring MVC, DispatcherServlet is the front controller. The DispatcherServlet’s job is to send the request on to a Spring MVC controller. A controller is a Spring component that processes the request. But a typical application may have several controllers, and DispatcherServlet needs some help deciding which controller to send the request to. So the DispatcherServlet consults one or more handler mappings (2) to figure out where the request’s next stop will be. The handler mapping pays particular attention to the URL carried by the request when making its decision. Once an appropriate controller has been chosen, DispatcherServlet sends the request on its merry way to the chosen controller (3). At the controller, the request drops off its payload (the information submitted by the user) and patiently waits while the controller processes that information. (Actually, a well-designed controller per- forms little or no processing itself and instead delegates responsibility for the business logic to one or more service objects.) The logic performed by a controller often results in some information that needs to be carried back to the user and displayed in the browser. This information is referred to as the model. But sending raw information back to the user isn’t suffi- cient—it needs to be formatted in a user-friendly format, typically HTML. For that, the information needs to be given to a view, typically a JavaServer Page (JSP). One of the last things a controller does is package up the model data and identify the name of a view that should render the output. It then sends the request, along with the model and view name, back to the DispatcherServlet (4). So that the controller doesn’t get coupled to a particular view, the view name passed back to DispatcherServlet doesn’t directly identify a specific JSP. It doesn’t even necessarily suggest that the view is a JSP. Instead, it only carries a logical name that will be used to look up the actual view that will produce the result. The DispatcherServlet consults a view resolver (5) to map the logical view name to a spe- cific view implementation, which may or may not be a JSP. Now that DispatcherServlet knows which view will render the result, the request’s job is almost over. Its final stop is at the view implementation (6), typically a JSP, where it delivers the model data. The request’s job is finally done. The view will use the model data to render output that will be carried back to the client by the (not- so-hardworking) response object (7).


We can say like DispatcherServlet taking care of everything in Spring MVC.

At web container start up:

  1. DispatcherServlet will be loaded and initialized by calling init() method
  2. init() of DispatcherServlet will try to identify the Spring Configuration Document with naming conventions like "servlet_name-servlet.xml" then all beans can be identified.

Example:

public class DispatcherServlet extends HttpServlet {

    ApplicationContext ctx = null;

    public void init(ServletConfig cfg){
        // 1. try to get the spring configuration document with default naming conventions
        String xml = "servlet_name" + "-servlet.xml";

        //if it was found then creates the ApplicationContext object
        ctx = new XmlWebApplicationContext(xml);
    }
    ...
}

따라서 일반적으로 DispatcherServlet요청 URI를 캡처하여로 전달하십시오 HandlerMapping. HandlerMapping컨트롤러가 논리 이름 (보기)을 리턴하는 컨트롤러의 메소드를 사용하여 검색 맵핑 Bean 그런 다음이 논리 이름이로 전송 DispatcherServlet됩니다 HandlerMapping. 그런 DispatcherServlet이야기 ViewResolver한 후, 접두사와 접미사를 추가하여 뷰의 전체 위치를 제공하기 위해 DispatcherServlet클라이언트보기를 제공합니다.


디스패처 컨트롤러는 모든 수신 요청이 프론트 컨트롤러로 작동하는 디스패처 서블릿에 의해 인터셉트되는 그림에 표시됩니다. 디스패처 서블릿은 XML 파일에서 핸들러 맵핑에 대한 항목을 가져오고 요청을 Controller에 표시합니다.


<?xml version='1.0' encoding='UTF-8' ?>
<!-- was: <?xml version="1.0" encoding="UTF-8"?> -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
               http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
    <context:component-scan base-package="com.demo" />
    <context:annotation-config />

    <mvc:annotation-driven />


    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="datasource" />
    </bean> 

          <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
        <property name="url" value="jdbc:mysql://localhost:3306/employee" />
        <property name="username" value="username" />
        <property name="password" value="password" />
    </bean> 

</beans>

참고 URL : https://stackoverflow.com/questions/2769467/what-is-dispatcher-servlet-in-spring

반응형