javaboiii의 Spring

Spring - SpringFramework구조의 흐름

javaboiii 2024. 10. 7. 22:17

Spring

DispatcherServlet

DispatcherServlet은 서블릿으로, 요청을 받고 적절한 컨트롤러로 전달하는 역할을 수행

 

서블릿 컨테이너

DispatcherServlet은 서블릿이므로 서블릿 컨테이너(Tomcat)에 의해 관리됨

요청이 들어올 때마다 DispatcherServlet이 자동으로 호출

서블릿을 설정하기 위해 web.xml 파일에 서블릿 매핑

<!-- web.xml -->
<servlet>
    <servlet-name>ds</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ds</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

<!-- ds-servlet.xml -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/login.do">login</prop>
            <prop key="/main.do">main</prop>
    	</props>
	</property>
</bean>
    <bean class="com.koreait.app.view.member.LoginController" id="login"/>
    <bean class="com.koreait.app.view.member.MainController" id="main"/>
</beans>

요청 처리 흐름

서버 구동 == 톰캣 == 서블릿 컨테이너 => web.xml 보고
 어 ? Spring에서 제공하는 DS 쓰네 ?
 그러면 ds-servlet.xml 주세용
 xml 파일을 보게되면서 spring 컨테이너의 개입이 시작됨

  1. 클라이언트 요청
  2. DispatcherServlet이 요청을 받고, 요청 URL에 따라 적절한 컨트롤러를 호출
  3. 컨트롤러는 비즈니스 로직을 처리하고, 결과를 ModelAndView 객체로 반환
  4. DispatcherServlet은 ModelAndView를 기반으로 뷰를 선택하여 사용자에게 응답을 전달

HandlerMapping

HandlerMapping은 요청 URL에 적합한 컨트롤러를 찾는 역할

DispatcherServlet이 클라이언트의 요청을 받으면, HandlerMapping을 통해

요청에 대한 핸들러(컨트롤러)를 결정

 

핸들러 설정xml

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/login.do">login</prop>
            <prop key="/main.do">main</prop>
        </props>
    </property>
</bean>

<bean class="com.koreait.app.view.member.LoginController" id="login" />
<bean class="com.koreait.app.view.member.MainController" id="main" />

 

Spring Controller

Spring Controller는 interface로 반환 타입이 ModelAndView인 메서드를 강제 오버라이딩을 해야됨

즉, 요청을 처리하는 메서드는 반드시 ModelAndView 객체를 반환하여야 하며,

데이터와 뷰 정보를 동시에 제공할 수 있음

 

ModelAndView

Spring에서 컨트롤러는 ModelAndView 객체를 반환

이 객체는 모델(데이터)과 뷰(화면)를 결합하여 전달하는 역할

public class LoginController implements Controller {
	@Autowired
	private MemberDAO memberDAO;

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// 1. 사용자(클라이언트,브라우저)가 보낸 파라미터에서 값 추출
		String mid=request.getParameter("mid");
		String password=request.getParameter("password");

		// 2. DB 연동
		MemberDTO memberDTO=new MemberDTO();
		memberDTO.setMid(mid);
		memberDTO.setPassword(password);
		memberDTO = memberDAO.selectOne(memberDTO);

		// 3. 페이지 이동 == 네비게이션
		ModelAndView mav=new ModelAndView();
		mav.setViewName("login");
		if(memberDTO != null) {
			mav.addObject("userName", memberDTO.getName());
			mav.setViewName("main.do");
		}
		return mav;
	}
}

 

ViewResolver

Spring은 ViewResolver를 통해 어떤 뷰를 사용할지 결정

ViewResolver는 포워드(forward)와 리다이렉트(redirect)를 자동으로 판단

이 과정에서 JSP 경로를 지정해줄 수 있으며, 액션이 있을 경우에는 .do를 붙여야 함

 

Spring Framework는 웹 애플리케이션 개발을 효율적으로 할 수 있도록 다양한 기능을 제공함 DispatcherServlet은 요청을 중앙에서 관리하고, HandlerMapping은

요청에 적합한 컨트롤러를 찾는 역할을 함

Spring Controller는 반환 타입이 ModelAndView인 메서드를 강제 오버라이딩해야 하며,

ModelAndView는 데이터와 뷰를 결합하여 응답을 처리함

ViewResolver는 어떤 뷰를 사용할지 결정