Spring-MVC 프레임 워크 개요

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

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

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

  • 그만큼 Controller 처리를 담당합니다. User RequestsBuilding 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, AtomRSS 피드, JasperReports, 등. 그러나 가장 일반적인 것은 JSTL로 작성된 JSP 템플릿입니다. 따라서 /WEB-INF/hello/hello.jsp에 간단한 hello 뷰를 작성해 보겠습니다.

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

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