Spring-MVC 프레임 워크
Spring Web MVC 프레임 워크는 유연하고 느슨하게 결합 된 웹 애플리케이션을 개발하는 데 사용할 수있는 MVC (Model-View-Controller) 아키텍처와 준비된 구성 요소를 제공합니다. MVC 패턴은 애플리케이션의 다양한 측면 (입력 로직, 비즈니스 로직 및 UI 로직)을 분리하는 동시에 이러한 요소간에 느슨한 결합을 제공합니다.
그만큼 Model 응용 프로그램 데이터를 캡슐화하며 일반적으로 POJO로 구성됩니다.
그만큼 View 모델 데이터 렌더링을 담당하며 일반적으로 클라이언트의 브라우저가 해석 할 수있는 HTML 출력을 생성합니다.
그만큼 Controller 사용자 요청을 처리하고 적절한 모델을 구축하고 렌더링을 위해 뷰로 전달합니다.
DispatcherServlet
Spring 웹 모델-뷰-컨트롤러 (MVC) 프레임 워크는 모든 HTTP 요청과 응답을 처리 하는 DispatcherServlet 을 중심으로 설계되었습니다 . Spring Web MVC DispatcherServlet 의 요청 처리 워크 플로우 는 다음 다이어그램에 설명되어 있습니다.
에 들어오는 HTTP 요청에 해당하는 이벤트의 순서입니다 다음 DispatcherServlet은 -
HTTP 요청을 수신 한 후 DispatcherServlet 은 HandlerMapping 을 참조하여 적절한 Controller 를 호출합니다 .
컨트롤러 요구를 받아 사용 GET 또는 POST 방법에 따라 해당 서비스를 호출 방법. 서비스 메소드는 정의 된 비즈니스 로직을 기반으로 모델 데이터를 설정하고 뷰 이름을 DispatcherServlet에 반환합니다 .
DispatcherServlet은 도움을 걸릴 것 ViewResolver를 픽업 요청에 대한 정의보기를.
보기가 완료되면 DispatcherServlet 은 모델 데이터를 브라우저에서 최종적으로 렌더링되는보기로 전달합니다.
위에서 언급 한 모든 구성 요소, 즉 HandlerMapping, Controller 및 ViewResolver는 웹 응용 프로그램에 필요한 몇 가지 추가 기능 이있는 일반 ApplicationContext 의 확장 인 WebApplicationContext w의 일부입니다.
필수 구성
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 디렉토리에 있습니다. 이 경우 파일은HelloWebservlet.xml.
다음으로, <servlet-mapping> 태그는 어떤 DispatcherServlet이 처리 할 URL을 나타냅니다. 다음으로 끝나는 모든 HTTP 요청은.jsp 에 의해 처리됩니다 HelloWeb DispatcherServlet.
기본 파일 이름을 [servlet-name] -servlet.xml로 , 기본 위치를 WebContent / WEB-INF 로 사용하지 않으 려면 web.xml 파일에 서블릿 리스너 ContextLoaderListener 를 추가하여이 파일 이름과 위치를 사용자 정의 할 수 있습니다. 다음과 같이-
<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.xml을 파일 전역에서 동일한 이름으로 정의 된 콩의 정의를 무시 정의 된 콩을 만드는 데 사용된다.
<컨텍스트 : 구성 요소 스캔 ...> 태그 등 @Controller와 @RequestMapping 같은 주석의 사용을 만들 수 있습니다 활성화 스프링 MVC 주석 스캐닝 기능에 사용됩니다
의 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)HTTP GET 요청을 처리하기위한 컨트롤러의 기본 서비스 메서드로 printHello () 메서드를 선언하는 데 사용됩니다. 동일한 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 요청을 처리하기위한 서비스 메소드를 정의합니다. 위에 정의 된 컨트롤러에 대해 다음과 같은 중요한 사항을 유의해야합니다.
서비스 메소드 내에서 필수 비즈니스 로직을 정의합니다. 요구 사항에 따라이 메서드 내에서 다른 메서드를 호출 할 수 있습니다.
정의 된 비즈니스 로직에 따라이 메소드 내에서 모델을 작성합니다. setter 다른 모델 속성을 사용할 수 있으며 이러한 속성은 최종 결과를 표시하기 위해보기에서 액세스됩니다. 이 예에서는 "message"속성을 사용하여 모델을 만듭니다.
정의 된 서비스 메소드는 다음의 이름을 포함하는 문자열을 반환 할 수 있습니다. view모델을 렌더링하는 데 사용됩니다. 이 예에서는 논리적 뷰 이름으로 "hello"를 반환합니다.
JSP보기 만들기
Spring MVC는 다양한 표현 기술에 대해 다양한 유형의 뷰를 지원합니다. 여기에는 JSP, HTML, PDF, Excel 워크 시트, XML, Velocity 템플릿, XSLT, JSON, Atom 및 RSS 피드, JasperReports 등이 포함됩니다.하지만 가장 일반적으로 우리는 JSTL로 작성된 JSP 템플릿을 사용합니다.
간단한 hello /WEB-INF/hello/hello.jsp에서보기-
<html>
<head>
<title>Hello Spring MVC</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>
여기 ${message}컨트롤러 내부에 설정 한 속성입니다. 보기에 여러 속성을 표시 할 수 있습니다.
Spring Web MVC 프레임 워크 예제
위의 개념을 바탕으로 Spring 웹 애플리케이션을 빌드하는 데 도움이 될 몇 가지 중요한 예제를 확인하겠습니다.
Sr. 아니. | 예 및 설명 |
---|---|
1 | Spring MVC Hello World 예제 이 예제는 간단한 Spring Web Hello World 애플리케이션을 작성하는 방법을 설명합니다. |
2 | Spring MVC 양식 처리 예제 이 예제는 데이터를 컨트롤러에 제출하고 처리 된 결과를 표시하기 위해 HTML 양식을 사용하여 Spring 웹 애플리케이션을 작성하는 방법을 설명합니다. |
삼 | 스프링 페이지 리디렉션 예제 Spring MVC Framework에서 페이지 리디렉션 기능을 사용하는 방법을 배웁니다. |
4 | 스프링 정적 페이지 예제 Spring MVC Framework에서 동적 페이지와 함께 정적 페이지에 액세스하는 방법을 배웁니다. |
5 | 스프링 예외 처리 예제 Spring MVC Framework에서 예외를 처리하는 방법을 배웁니다. |