아래 소스중 #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>
서브라임 에디터(유료) Java빌드시, OUT 결과에서 한글깨지는 에러처리 방법 (0) | 2015.11.22 |
---|---|
메이븐 프로젝트 생성(web.xml+AOP설정+컨트롤러매핑+서비스파일추가까지(DAO는제외) (0) | 2015.10.13 |
MyBatis 쿼리파일에 if, choos, when, otherwise 사용하기 (0) | 2015.09.14 |
확장자가 .jspf 인 파일의 사용목적 (1) | 2015.09.12 |
EL 과 JSTL 기본 (0) | 2015.09.12 |
댓글 영역