티스토리 뷰

Dev/Spring

Spring MVC 정리

마이스토리 2016. 5. 19. 10:09

>> Spring MVC(Model-View-Controller)의 핵심 Component (Spring 2.5.6 기준)


>> DispatcherServlet 에서의 웹요청 흐름

 

>> Web.xml에 DispatcherServlet, ApplicationContext, WebApplicationContext 설정하기

<!-- ApplicationContext 빈 설정 -->

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath*:egovframework/spring/com/context-*.xml</param-value>

    </context-param>

<!-- 웹 어플리케이션이 시작되는 시점에 ApplicationContext을 로딩하며, 로딩된 빈정보는 모든 WebApplicationContext들이 참조할 수 있다.-->

    <listener>

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

    </listener>

    <!-- WebApplicationContext 빈 설정 -->

    <servlet>

        <servlet-name>action</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>

            <param-name>contextConfigLocation</param-name>

            <param-value>/WEB-INF/config/egovframework/springmvc/*.xml</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup>

    </servlet>

 



>> HandlerMapping

> Http Request 요처을 담당할 Controller를 mapping한다.

> 여러 개의 HandlerMapping을 사용가능

> 3.1 이후부터 RequestMappingHandlerMapping 이 기본 HandlerMapping.(DefaultAnnotationHandlerMapping이 deprecated되면서 대체됨)


> RequestMappingHandlerMapping 사용 방법

선언하지 않는 방법

  <context:component-scan base-package="org.mycode.controller" />

  --> 패키지 org.mycode.controller 아래의 @Controller중에 @RequestMapping에 선언된 URL과 해당 @Controller 클래스의 메소드와 매핑한다.


<mvc:annotation-driven/>을 선언하는 방법

--> org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping ,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter 이 구성


* RequestMappingHandlerMapping을 직접 선언하는 방법

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

--> 다른 HandlerMapping과 함계 사용할 때 선언.



> ControllerClassNameHandlerMapping 사용 방법

  • caseSensitive : Controller 이름으로 URL 경로 mapping시에 대문자 사용여부. (ex. /insertemployee* 가 아니라 /easycompany/insertEmployee*로 사용하기 원할때).
  • pathPrefix : URL 경로에 기본적인 prefix 값. 기본값은 false이다.
  • basePackage : URL mapping에 사용되는 Controller의 기본 패키지 이름이다. 사용되는 Controller의 패키지명에 기본 패키지에 추가되는 subpackage가 있다면 해당 subpackage 이름이 URL 경로에 추가된다.

<beans ..> ... <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"> <property name="pathPrefix" value="/easycompany"/> <property name="caseSensitive" value="true"/> <property name="basePackage" value="com.easycompany.controller"/> </bean>   <bean class="com.easycompany.controller.hierarchy.EmployeeListController"/>   <bean class="com.easycompany.controller.hierarchy.InsertEmployeeController"/> ... </beans>

--> EmployeeListController ↔ /easycompany/hierarchy/employeeList*, InsertEmployeeController ↔ /easycompany/hierarchy/insertEmployee* 과 같이 url mapping이 이루어 진다.



> SimpleUrlHandlerMapping 사용 방법

   * ant-style 패턴지원, 하나의 controller에 여러 URL mapping.

   * interceptor를 특정 url 단위로 적용가능

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="interceptors"> <list> <ref local="authenticInterceptor"/> </list> </property> <property name="mappings"> <props> <prop key="/employeeList.do">employeeListController</prop> <prop key="/insertEmployee.do">insertEmployeeController</prop> <prop key="/updateEmployee.do">updateEmployeeController</prop> </props> </property> </bean> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/**/login.do">staticPageController</prop> <prop key="/static/*.html">staticPageController</prop> </props> </property> </bean>   <bean id="loginController" class="com.easycompany.controller.hierarchy.LoginController"/> <bean id="employeeListController" class="com.easycompany.controller.hierarchy.EmployeeListController" /> <bean id="insertEmployeeController" class="com.easycompany.controller.hierarchy.InsertEmployeeController" /> <bean id="updateEmployeeController" class="com.easycompany.controller.hierarchy.UpdateEmployeeController" /> <bean id="staticPageController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />   <bean id="authenticInterceptor" class="com.easycompany.interceptor.AuthenticInterceptor" />


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30