프론트 컨트롤러란?

jaeyong Lee·2024년 7월 10일
0

프론트 컨트롤러 패턴

모든 요청을 하나의 중앙 진입점에서 처리하는 패턴
이렇게 하면 각 요청마다 서블릿을 만들 필요가 없다.

spring의 dispatcherServlet

spring 에서는 dispatcherServlet이 프론트 컨트롤러 역할을 한다.
1. http 모든 요청을 dispatcher 즉 중앙에서 처리
2. 요청을 적절한 핸들러(controller)에 매핑
3. intercepter, viewresolver 등을 통해 처리과정을 유연하게 확장 가능

dispatcher servlet, servlet context

DispatcherServlet은 Servlet Context를 사용한다.
DispatcherServlet이 초기화될 때, Servlet Context를 생성하고 이를 통해 웹 계층의 빈(예: 컨트롤러, 뷰 리졸버 등)을 관리한다.

아하 디스패처를 사용하려고 servletcontext를 생성하고 그안에 빈들을 넣어서 디스패처가 흐름 처리

실제 코드

web.xml 파일

4. dispatcherServlet 설정 
spring mvc 핵심 서블릿 -> dispatcher 설정파일 servlet-context.xml설정
경로 : / -> 모든 경로에 dispatcher servlet 적용
load on start : 서블릿들 사이에서 첫번째로 초기화
  <servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

servlet-context파일

<annotation-driven />
	1.애너테이션 사용가능하게 한다.
	
	<resources mapping="/resources/**" location="/resources/" />
	2.정적 파일이랑 Compile할 파일이랑 분리해서 효율적으로 요청을 처리
    예를들면 정적요소들을 변경할 때면 서버실행 할 필요 없음
	

	<beans:bean id="tilesConfigurer" 		   class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
	<beans:property name="definitions">
		<beans:list>
		<!-- 타일즈 폴더 안의 xml파일들 -->
			<beans:value>classpath:tiles/*.xml</beans:value>
		</beans:list>
	</beans:property>

3.TilesConfigurer은 definition이라는 속성을 이용해 tiles파일 위치를 지정해준다. 타일즈의 설정파일들의 위치를 지정한다.
definitions는 타일즈의 정의파일들의 위치를 나타낸다.
	


<beans:property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles2.SpringBeanPreparerFactory"/>
</beans:bean>
타일즈 뷰에서 고정된 viewpage의 데이터를 가져와 빈으로 만들어 필요할때 효과적으로 불러올 수 있다.  



<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
	<beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/> 
</beans:bean>
UrlBasedViewResolver클래스는 URL기반의 뷰를 해석하고 Rendering해준다. 
  	(viewResolver : 내보낼 view를 결정하고 해당 뷰를 렌더링한다.)
  	TilewView : 뷰 리졸버가 타일뷰를 사용하겠다.
  	쉽게 말해 URL기반의 뷰 리졸버가 URL을 사용하여 타일즈뷰를 사용하고 나타내겠다는 말이다.
  


	<context:component-scan base-package="com.attiWell" />
	4.지정된 패키지에서 스테레오타입4가지를 찾아 에너테이션이 붙은 클래스를 찾고 빈으로 등록한다. 
    
    
    
    
	
	
	<mvc:interceptors>
  <mvc:interceptor>
    <mvc:mapping path="/*/*.do"/> 
    <mvc:mapping path="/*/*/*.do"/> 
      <beans:bean class="com.attiWell.common.interceptor.ViewNameInterceptor" />
  </mvc:interceptor>
 </mvc:interceptors>

5.mvc:interceptors 인터셉터 기능을 사용하도록 설정합니다. 
	<mvc:mapping path="/*/*.do"/>  
	<mvc:mapping path="/*/*/*.do"/>  이 경로들에서만 인터셉터 빈을 수행합니다.(사실상 모든경로)
	ViewNameInterceptor 인터셉터 기능을 수행할 빈
	
 
 
 
 
 	<!-- 멀티파트 리졸버 -->
    <beans:bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
       <beans:property name="maxUploadSize" value="52428800" />
       <beans:property name="maxInMemorySize" value="52428800" />
       <beans:property name="defaultEncoding" value="utf-8" />
    </beans:bean>
	
 
</beans:beans>

6.
 <!--파일 업로드를 처리하기 위한 멀티파틑 리졸버클래스를 설정하는 부분입니다.
 CommonsMultipartResolver 클래스를 빈으로 등록하고 있습니다. 
  <beans:property name="maxUploadSize" value="52428800" />: maxUploadSize 속성은 클라이언트가 업로드할 수 있는 최대 파일 크기를 지정합니다. 
  <beans:property name="maxInMemorySize" value="52428800" />: maxInMemorySize 속성은 인메모리에 저장할 최대 크기를 나타냅니다
  <beans:property name="defaultEncoding" value="utf-8" />: defaultEncoding 속성은 요청 파라미터 등을 디코딩할 때 사용할 인코딩을 설정합니다
  (파일이름 인코딩 설정)
  -->

0개의 댓글

관련 채용 정보