Spring-MVC 프레임 워크 개요

Spring Web MVC 프레임 워크는 유연하고 느슨하게 결합 된 웹 애플리케이션을 개발하는 데 사용할 수있는 모델-뷰-컨트롤러 아키텍처 및 준비된 구성 요소를 제공합니다. MVC 패턴은 애플리케이션의 다양한 측면 (입력 로직, 비즈니스 로직 및 UI 로직)을 분리하는 동시에 이러한 요소간에 느슨한 결합을 제공합니다.

  • 그만큼 Model 응용 프로그램 데이터를 캡슐화하며 일반적으로 다음으로 구성됩니다. POJO.

  • 그만큼 View 모델 데이터 렌더링을 담당하며 일반적으로 HTML 클라이언트의 브라우저가 해석 할 수있는 출력.

  • 그만큼 Controller 처리를 담당합니다. User Requests 과 Building Appropriate Model 렌더링을 위해 뷰로 전달합니다.

DispatcherServlet

Spring Web MVC (Model-View-controller) 프레임 워크는 모든 HTTP 요청과 응답을 처리하는 DispatcherServlet을 중심으로 설계되었습니다. Spring Web MVC DispatcherServlet의 요청 처리 워크 플로는 다음 그림에 나와 있습니다.

다음은 DispatcherServlet에 들어오는 HTTP 요청에 해당하는 이벤트의 순서입니다.

  • HTTP 요청을 수신 한 후 DispatcherServlet은 HandlerMapping 적절한 컨트롤러를 호출합니다.

  • 컨트롤러는 요청을 받고 사용 된 서비스에 따라 적절한 서비스 방법을 호출합니다. GET 또는 POST method. 서비스 메소드는 정의 된 비즈니스 로직을 기반으로 모델 데이터를 설정하고보기 이름을 DispatcherServlet에 리턴합니다.

  • DispatcherServlet은 다음에서 도움을받습니다. ViewResolver 요청에 대해 정의 된보기를 선택합니다.

  • 보기가 완료되면 DispatcherServlet은 브라우저에서 최종적으로 렌더링되는보기에 모델 데이터를 전달합니다.

위에서 언급 한 모든 구성 요소, 즉 HandlerMapping, Controller 및 ViewResolver는 WebApplicationContext, 평야의 확장 ApplicationContext 웹 애플리케이션에 필요한 몇 가지 추가 기능이 있습니다.

필수 구성

DispatcherServlet이 처리 할 요청을 매핑해야합니다. web.xml파일. 다음은 선언 및 매핑을 보여주는 예입니다.HelloWeb DispatcherServlet-

<web-app id = "WebApp_ID" version = "2.4"
   xmlns = "http://java.sun.com/xml/ns/j2ee" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee 
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
   <display-name>Spring MVC Application</display-name>

   <servlet>
      <servlet-name>HelloWeb</servlet-name>
      <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
      <servlet-name>HelloWeb</servlet-name>
      <url-pattern>*.jsp</url-pattern>
   </servlet-mapping>
</web-app>

그만큼 web.xml 파일은 WebContent/WEB-INF웹 애플리케이션의 디렉토리. 초기화시HelloWeb DispatcherServlet, 프레임 워크는 이름이 지정된 파일에서 애플리케이션 컨텍스트를로드하려고합니다. [servlet-name]-servlet.xml애플리케이션의 WebContent / WEB-INF 디렉토리에 있습니다. 이 경우 파일은HelloWeb-servlet.xml.

다음으로 <servlet-mapping>태그는 어떤 DispatcherServlet에서 처리 할 URL을 나타냅니다. 여기서 .jsp로 끝나는 모든 HTTP 요청은HelloWeb DispatcherServlet.

기본 파일 이름을 다음과 같이 사용하지 않으려면 [servlet-name]-servlet.xml WebContent / WEB-INF로 기본 위치를 지정하면 서블릿 리스너를 추가하여이 파일 이름과 위치를 사용자 정의 할 수 있습니다. ContextLoaderListener 다음과 같이 web.xml 파일에서-

<web-app...>

   <!-------- DispatcherServlet definition goes here----->
   ....
   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/HelloWeb-servlet.xml</param-value>
   </context-param>

   <listener>
      <listener-class>
         org.springframework.web.context.ContextLoaderListener
      </listener-class>
   </listener>
</web-app>

이제 필요한 구성을 확인하겠습니다. HelloWeb-servlet.xml 웹 애플리케이션의 WebContent / WEB-INF 디렉토리에있는 파일입니다.

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:context = "http://www.springframework.org/schema/context"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "
   http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package = "com.tutorialspoint" />

   <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name = "prefix" value = "/WEB-INF/jsp/" />
      <property name = "suffix" value = ".jsp" />
   </bean>

</beans>

다음은에 대한 몇 가지 중요한 사항입니다. HelloWeb-servlet.xml 파일-

  • 그만큼 [servlet-name]-servlet.xml 파일은 정의 된 Bean을 작성하는 데 사용되며 전역 범위에서 동일한 이름으로 정의 된 모든 Bean의 정의를 대체합니다.

  • 그만큼 <context:component-scan...> 태그는 Spring MVC 주석 스캐닝 기능을 활성화하는 데 사용되며, 다음과 같은 주석을 사용할 수 있습니다. @Controller 과 @RequestMapping등

  • 그만큼 InternalResourceViewResolver보기 이름을 확인하기 위해 정의 된 규칙이 있습니다. 위에 정의 된 규칙에 따라hello 에 위치한 뷰 구현에 위임됩니다. /WEB-INF/jsp/hello.jsp.

이제 컨트롤러, 모델 및 뷰와 같은 실제 구성 요소를 만드는 방법을 이해하겠습니다.

컨트롤러 정의

DispatcherServlet은 특정 기능을 실행하기 위해 컨트롤러에 요청을 위임합니다. 그만큼@Controller주석은 특정 클래스가 컨트롤러 역할을 수행함을 나타냅니다. 그만큼@RequestMapping 주석은 URL을 전체 클래스 또는 특정 처리기 메서드에 매핑하는 데 사용됩니다.

@Controller
@RequestMapping("/hello")
public class HelloController{
 
   @RequestMapping(method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }

}

그만큼 @Controller주석은 클래스를 Spring MVC 컨트롤러로 정의합니다. 여기, 첫 번째 사용@RequestMapping 이 컨트롤러의 모든 처리 방법이 /hello 통로.

다음 주석 @RequestMapping (method = RequestMethod.GET) 선언하는 데 사용됩니다 printHello()HTTP GET 요청을 처리하기위한 컨트롤러의 기본 서비스 메소드로 메소드를 사용합니다. 동일한 URL에서 POST 요청을 처리하는 다른 방법을 정의 할 수 있습니다.

위의 컨트롤러를 다른 형식으로 작성할 수도 있습니다. 여기서 @RequestMapping에 다음과 같이 추가 속성을 추가 할 수 있습니다.

@Controller
public class HelloController{
 
   @RequestMapping(value = "/hello", method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }

}

그만큼 value 속성은 핸들러 메소드가 매핑되는 URL과 method 속성은 HTTP GET 요청을 처리하기위한 서비스 메소드를 정의합니다.

다음은 위에서 정의한 컨트롤러와 관련하여 주목해야 할 몇 가지 중요한 사항입니다.

  • 서비스 메소드 내에서 필수 비즈니스 로직을 정의합니다. 요구 사항에 따라이 메서드 내에서 다른 메서드를 호출 할 수 있습니다.

  • 정의 된 비즈니스 로직에 따라이 메소드 내에서 모델을 작성합니다. 다른 모델 속성을 설정할 수 있으며 이러한 속성은 결과를 표시하기 위해보기에서 액세스됩니다. 이 예에서는 "message"속성을 사용하여 모델을 만듭니다.

  • 정의 된 서비스 메소드는 다음의 이름을 포함하는 문자열을 반환 할 수 있습니다. view모델을 렌더링하는 데 사용됩니다. 이 예에서는 논리적 뷰 이름으로 "hello"를 반환합니다.

JSP보기 만들기

Spring MVC는 다양한 프레젠테이션 기술에 대해 다양한 유형의 뷰를 지원합니다. 여기에는 다음이 포함됩니다.JSPs, HTML, PDF, Excel Worksheets, XML, Velocity Templates, XSLT, JSON, Atom 과 RSS 피드, JasperReports, 등. 그러나 가장 일반적인 것은 JSTL로 작성된 JSP 템플릿입니다. 따라서 /WEB-INF/hello/hello.jsp에 간단한 hello 뷰를 작성해 보겠습니다.

<html>
   <head>
      <title>Hello Spring MVC</title>
   </head>
   <body>
      <h2>${message}</h2>
   </body>
</html>

여기 ${message}다음은 컨트롤러 내부에 설정 한 속성입니다. 보기에 여러 속성을 표시 할 수 있습니다.