전자정부 프레임워크 구조 샘플 프로젝트 구조(Controller)(3)

 

오랜만에 지난 번 샘플 HelloWorld 프로젝트 생성에 이어 포스팅을 씁니다. 
Controller, Vo, Service, Dao, sqlmap를 모두 설명할려면 포스팅이 너무 길어지기 때문에 컨트롤러부터 설명하고 연재로 포스팅할 계획입니다. 

샘플 프로젝트의 구조에 대해서 알아보도록 할께요.

지난 번에 생성한 샘플 프로젝트 서버를 가동하도록 합니다.

Servers에서 [시작]버튼을 누르거나 Ctrl+Alt+R 키를 눌려 시작합니다.

웹브라우저에서 "http://localhost:8080/HelloWorld"를 입력하여 화면을 띄워봅니다. 다음과 같이 기본 게시판 화면이 뜨는군요.
우리는 상세 ../HelloWorld만 입력했고 상세 URL(http://localhost:8080/HelloWorld/egovSampleList.do)을 입력하지 않았는데 화면이 출력됩니다.

프로젝트에서 "HelloWorld > src > main > webapp > WEB-INF > web.xml" 파일을 열어서 보면 "welcome-file-list"이라는 부분이 있습니다.
"/" 접근하게 되면 "index.jsp"을 열도록 설정된 부분입니다.

 <welcome-file-list>
     <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>

"HelloWorld > src > main > webapp > index.jsp" 파일을 열어보면 "<jsp:forward page="/egovSampleList.do"/>" 이렇게 작성되어 있습니다. 
"HelloWorld/egovSampleList.do"로 포워드 하도록 작성되어 있습니다. 
"http://localhost:8080/HelloWorld/index.jsp"를 입력보면 "http://localhost:8080/HelloWorld"과 동일한 화면이 출력되는 것을 확인 할 수 있습니다.

WEB-INF 디렉토리는 클라이언트에서 접근이 불가능한 디렉토리입니다. 
어떤 WAS를 사용하던지 정해진 규약이기 때문에 클라이언트에서 접근 할 수 없는 디렉토리입니다.  
"webapp" 디렉토리는 서비스하는 웹의 기본 루트 디렉토리입니다.
"webapp/css/index.jsp"와 같이 css 디렉토리에 index.jsp를 복사해 넣고 "http://localhost:8080/HelloWorld/css/index.jsp"로 접근해 보면 화면이 열리는 것을 확인 할 수 있습니다.
이번에는 webapp/WEB-INF/index.jsp로 index.jsp를 복사해 넣고 "http://localhost:8080/HelloWorld/WEB-INF/index.jsp"로 접근해보겠습니다.
에러 페이지가 설정되어 있다면 404오류 페이지가 아니라 다른 설정한 화면이 보이겠죠?

2017/07/10 - [IT만들기/Java] - jsp 에러페이지 만들기

본론으로 돌아와서 "egovSampleList.do"는 어디에 설정 되어 있는 것일까요?
이클립스에서 "Search > File" 메뉴를 클릭하고 "Containing text"에 "egovSampleLIst", "File name patterns"에 "*.java"를 입력하고 "Search" 버튼을 누릅니다.

 

그럼 다음과 같이 "Search" 창에 "EgovSampleController.java"에 @RequestMapping(value = "/egovSampleList.do") 부분이 검색됩니다. 이 부분을 더블 클릭하면 찾은 파일이 열립니다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

EgovSampleController.java 파일의 목록 관련된 부분을 보도록 할께요.
맨 위에 "@Controller" 어노테이션(Annotation)이 설정되어 있습니다. Spring가 기동되면 Controller 어노테이션이 설정된 class에서 "@RequestMapping"을 수집하여 메모리에 올려놓고 서비스 요청이 들어오면 해당 RequestMapping에 매핑된 메소드를 실행하게 됩니다. 소스에 간략한 설명을 달아 놓았으니 아래 소스 부분을 한번 보시기 바랍니다.
스프링이 자바에 RequestMapping 어노테이션만 있으면 모든 class에서 수집을 할까요? 
그렇지 않습니다. 
"HelloWorld/src/main/webapp/WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml 파일에 다음과 같이 설정되어 있습니다.
    <context:component-scan base-package="egovframework">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    </context:component-scan>
"egovframework" 패키지에서 @Conponent 어노테이션은 수집하고 @Service, @Repository 어노테이션은 제외하라고 설정 되어 있습니다.
이렇게 되어 있기 때문에 컨트롤러 어노테이션의 리퀘스트 매핑 어노테이션을 수집하게 되는 것입니다.

@Controller
public class EgovSampleController { /** EgovSampleService */
 @Resource(name = "sampleService")
 private EgovSampleService sampleService;

 /** EgovPropertyService */
 @Resource(name = "propertiesService")
 protected EgovPropertyService propertiesService;

 /** Validator */
 @Resource(name = "beanValidator")
 protected DefaultBeanValidator beanValidator;

 /**
  * 글 목록을 조회한다. (pageing)
  * @param searchVO - 조회할 정보가 담긴 SampleDefaultVO
  * @param model
  * @return "egovSampleList"
  * @exception Exception
  */
 @RequestMapping(value = "/egovSampleList.do")
 public String selectSampleList(@ModelAttribute("searchVO") SampleDefaultVO searchVO, ModelMap model) throws Exception {

     /* *************************************** 
selectSmapleList 메소드에 @ModelAttribute("searchVO")이 있는데 요청받은 파라미터 값을 VO에 세팅하여 "searchVO"라는 오브젝트명으로 뷰(jsp 파일)로 다른 설정 없이도 전달하는 역활을 합니다. 
jsp 파일에서는 JSTL 문법으로 ${searchVO.searchKeyword}로 받을수가 있습니다.(샘플 목록에서 검색 조건 input의 이름이 "searchKeyword"입니다)
또는 java 문법으로 다음과 같이 받으면 됩니다.
<%
SampleDefaultVO vo = (SampleDefaultVO)request.getAttribute("searchVO"); 
out.println( vo.getSearchKeyword() );
%>

이와 비슷하게 @RequestParam 이 있는데 이것은 파라미터를 1:1로 매핑해야 합니다.   
@RequestParam String name과 같이 말이죠. 만약 검색 조건을 받는 것이라면 검색 조건이 늘어날때마다 추가되어야 합니다. 다음과 같이 말이죠.
selectSampleList(@RequestParam String name, @RequestParam String address, ModelMap model) 
@RequestParam과 @ModelAttribute는 생략 하면 Object Type에 따라 RequestParam이나 ModelAttribute로 변환한다고 하지만 잘못 변환될 가능성을 배제하기 위해 붙여주는것이 좋다고 합니다.
     ***************************************** */  

      /** EgovPropertyService.sample */
      searchVO.setPageUnit(propertiesService.getInt("pageUnit"));
      searchVO.setPageSize(propertiesService.getInt("pageSize"));

      /** pageing setting */
      PaginationInfo paginationInfo = new PaginationInfo();
      paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
      paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
      paginationInfo.setPageSize(searchVO.getPageSize());

      searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
      searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
      searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());

      List<?> sampleList = sampleService.selectSampleList(searchVO);
      model.addAttribute("resultList", sampleList);
      /* ************************* 
        데이터를 조회하고 "resultList"라는 이름으로 jsp가 받을 수 있도록 세팅합니다.
      ************************** */

      int totCnt = sampleService.selectSampleListTotCnt(searchVO);
      paginationInfo.setTotalRecordCount(totCnt);
      model.addAttribute("paginationInfo", paginationInfo);

      return "sample/egovSampleList";
/* *******************
     스프링은 "sample/egovSampleLIst" 값을 받아서 egovSampleList.jsp 호출합니다.
     jsp는 was에서 java -> 서블릿 class로 변환하여 서비스 합니다. 
     뷰의 상세 설정은 "dispatcher-servlet.xml" 파일에 설정되어 있습니다.

     <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"
     p:viewClass="org.springframework.web.servlet.view.JstlView"
     p:prefix="/WEB-INF/jsp/egovframework/example/" p:suffix=".jsp"/>

    최종적으로 "/WEB-INF/jsp/egovframework/example/"+"sample/egovSampleList"+".jsp"(suffix) 가 됩니다.

******************** */ 
 }

 



출처: http://mystarlight.tistory.com/122 [커피향처럼]

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
66 스프링(Spring) 개발 - (6) 프로젝트 생성 및 개발 시작 file 졸리운_곰 2018.01.17 61
65 스프링(Spring) 개발 - (5) 스프링 기본 프로젝트 분석 file 졸리운_곰 2018.01.17 75
64 스프링(Spring) 개발 - (4) 스프링 프로젝트 생성하기 file 졸리운_곰 2018.01.17 70
63 스프링(Spring) 개발 - (3) 개발환경 구성하기 - 이클립스 플러그인 설치(3/3) file 졸리운_곰 2018.01.17 95
62 스프링(Spring) 개발 - (2) 개발환경 구성하기 [Eclipse+Maven+SVN] (2/3) file 졸리운_곰 2018.01.17 49
61 스프링(Spring) 개발 - (1) 개발환경 구성하기 [Eclipse+Maven+SVN] (1/3) file 졸리운_곰 2018.01.17 69
60 Spring에서 파라미터 전송 file 졸리운_곰 2018.01.17 101
59 View 데이터의 Controller 전달 방법 졸리운_곰 2018.01.17 52
58 전자정부프레임워크(Spring) 값 주고 받는 3가지 방법 졸리운_곰 2018.01.17 59
57 iBatis 와 MyBatis 차이점 iBatis -> MyBatis 졸리운_곰 2018.01.16 288
56 전자정부 프레임워크 구조 샘플 프로젝트 구조(Service 및 Dao)(4) file 졸리운_곰 2018.01.12 124
» 전자정부 프레임워크 구조 샘플 프로젝트 구조(Controller)(3) file 졸리운_곰 2018.01.12 275
54  전자정부 프레임워크(eGovframe) 동적 웹프로젝트 시작하기(2) file 졸리운_곰 2018.01.12 73
53 전자정부 프레임워크(egov framework) 설치하기(1) file 졸리운_곰 2018.01.12 165
52 01. 전자정부 표준 프레임워크는 무엇? file 졸리운_곰 2018.01.12 125
51 전자정부 표준프레임워크 eGov : 실행환경 템플릿 및 예제 테이블정의서 file 졸리운_곰 2018.01.11 260
50 전자정부표준 프레임워크 eGov 공통 콤퍼넌트 설명 (산출물) file 졸리운_곰 2018.01.11 225
49 전자정부프레임워크 eGov : 로그인 분석 졸리운_곰 2018.01.11 261
48 전자정부표준프레임워크 eGov : Sample예제 기본적인 흐름 분석하기. 졸리운_곰 2018.01.11 182
47 전자정부표준 프레임워크 eGov 테이블 설명서 : 공통컴포넌트 3.5.0 ERD 파일 file 졸리운_곰 2018.01.11 258
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED