상세 컨텐츠

본문 제목

스프링 MVC 구성

JSP·자바·코틀린

by 김일국 2015. 9. 20. 14:04

본문

아래 소스중 #MVC- 로 지정한 부분이 MVC구조의 핵심 입니다.

@어노테이션 을 주의 깊게 보세요, 모두 MVC매핑연결에 사용되는 구조입니다.


1. web.xml파일의 DispatcherServlet(페이지이동-배치방식 서블릿) 의 servlet-mapping 설정으로 웹브라우저의 요청(액션)을

예,

<servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
</servlet-mapping>

*.do 액션(브라우저요청)이 들어올때로 한정합니다.

2. web.xml 에서 지정한

예,

<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/egov-com-*.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
 </servlet>


위 egov-com-servlet.xml 파일내부의 component-scan설정으로 do액션이 요청될때 핸들러매핑이 발생합니다.

컨트롤러 매핑방식은 여러가지 (web.xml에서 BeanNameUrlHandlerMapping 으로 직접지정)가 있지만,

컨트롤러가 많은 프로젝트는 아래와 같이 auto-scan 방식을 사용하게 됩니다.

"패키지폴더명"으로 지정된 폴더의 컨트롤클래스  내부의 @annotation을 자동 로딩 지정됨.

<context:component-scan base-package="패키지폴더명">
  <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation" />
  <context:exclude-filter expression="org.springframework.stereotype.Service"    type="annotation" />
  <context:exclude-filter expression="org.springframework.stereotype.Repository" type="annotation" />
</context:component-scan>


3. "패키지폴더명"/UIHomeController.java #MVC-컨트롤러 클래스 파일 생성

핸들러매칭방식지정

예,

"패키지폴더명" 내부의 클래스파일 중 @annotation 어노테이션 매핑방식: @RequestMapping ("/home/main.do")

******** 컨트롤러와 인터페이스 서비스 구현 분리 ***********

예,

package "패키지명폴더명";

...

@Controller
public class UIHomeController extends BaseController{

 @Resource (name = "UIHomeService") //UIHomeService 인터페이스 호출

 private UIHomeService homeService;

/*** #MVC-비지니스 모델 구현 파일 생성

사용자가 제작한 비지니스 모델인 인터페이스 서비스 구현 호출

public interface UIHomeService {...} 인터페이스파일(UIHomeService.java)

 -> @Service ("UIHomeService") 구현 클래스 파일(UIHomeServiceImpl.java) 위 인터페이스와 매핑
       public class UIHomeServiceImpl {...

@Resource (name = "HomeMapper") // #MVC-비지니스 모델의 쿼리 UIHome.sql.mysql 파일 생성

<mapper namespace="쿼리파일패키지폴더.HomeMapper"> //UIHome.sql.mysql 파일 내부에서 위 구현서비스피일과 매핑되는 이름 지정
 private HomeMapper homeMapper;

}

***/

 /**
  * 홈 화면
  */
 @RequestMapping ("/home/main.do")
 public ModelAndView main(HttpServletRequest req, HttpServletResponse res, UIHomeVO vo) throws Exception {
  ModelAndView mav = new ModelAndView();
  setHome(req, vo);

  // 페이지 홈에 사용되는 Value Object(VO) 필드값 생성 UIHomeVO.java (Valeu Object파일에서 쿼리매핑에 사용되는 get,set 필드 지정)
 UIHomeVO home = new UIHomeVO();  

 home.setHomeSeq(HomeSeq);

  ResultSet comrs = homeService.getDetail(UIHomeVO); // ***사용자가 분리한 인터페이스서비스의 메서드 호출***

....

mav.setViewName("/home/main"); //main.jsp #MVC-뷰파일로 리턴값 출력*************

return mav;

}

위 egov-com-servlet.xml 파일내부의 viewResolver설정으로 do액션이 요청될때, mav네임(모델엔뷰네임)의 뷰파일 확장자를 jsp로 지정

예,

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="order" value="1" />
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  <property name="cache" value="true" />
  <property name="prefix" value="/WEB-INF/view" /> <!-- 실제 View파일 위치 지정 -->
  <property name="suffix" value=".jsp" />
  <property name="contentType" value="text/html;charset=UTF-8" />
 </bean>


관련글 더보기

댓글 영역