1. Controller
   컨트롤러는 Dispatcher Servlet 에 의해 불리어지며 비즈니스 로직을 처리한다. 스프링은 다양한 컨트롤러 컴포넌트들을 포함한다. 스프링에서 모든 컨트롤러 컴포넌트는 org.springframework.web.servlet.mvc.Controller 인터페이스를 구현한 것이다. 다음은 스프링에서 활용가능한 컨트롤러 컴포넌트이다.

  • SimpleFormController
  • AbstractController
  • AbstractCommandController
  • CancellableFormController
  • 위 컨틀롤러에 대해서 상세하게 알아보기로 하자.

     가. Abstract Controller
        만약에 여러분들이 컨트롤 인터페이스를 구현하는것 대신에 어느 정도 기초하에서 커스텀 컨트롤러 컴포넌트를 구현하기를 원한다면 GET 과 POST 메소드를 지원하는 AbsrtactController 를 상속하여 구현 가능하다. 이 컨트롤러는 간단한 목적을 위해 사용되어야 한다. 예를 들자면 요청 패러미터를 검사할 필요없이 클라이언트에게 간단한 리소스를 리턴하는 경우이다.

    MySimpleController.java

    public class MySimpleController extends AbstractController{

        public void handleRequestInternal(HttpServletRequest request,
    HttpServletResponse response){

            return new ModelAndView("myView");

        }
    }

     나.  Abstract Command Controller
       Command Controller 의 개념은 비즈니스 로직이 사용자가 제출한 값에 의존할때 중요해진다.
    Request 패러미터 값과 세션 오브젝트 값들을 얻기위해 서블릿 API 에 의존하는 대신에 그러한 정보를 얻기 위해 Abstract Command Controller 에 의존할 수 있다. 예를들어 사용자의 존재 유무에 따라서 성공과 실패를 보여주는 아래 코드가 있다고 하자.

    MySimpleController.java 

    MySimpleController.java

    				
    public class MySimpleController extends AbstractCommandController{
    
        public MySimpleController(){
            setCommandClass(UserInfo.class);
        }
    
        public void handle(HttpServletRequest request, HttpServletResponse response,
    	Object command){
    
            UserInfo userInfo = (UserInfo)command;
            if ( exists(userInfo.getUserName){
                return new ModelAndView("success");
            }else{
                return new ModelAndView("failure");
            }
        }
    
        private boolean exits(String username){
            // Some logic here.
        }
    }
    클라이언트에 의해 받게되는 username 필드에 대한 값은 UserInfo에서 username이라 불리는 프로퍼티와 직접
    맵핑하게 된다.위 프로그램 소스의 컨스트럭쳐를 보면 setCommandClass() 메소드를 호출해서 클라이언트 요청
    패러미터를 가지게 될 Command 클래스의 이름을 명시한것을 볼수 있다.
    Command Controller의 경우에는 DispatcherServlet 에 의해 불리게 될 메소드는 handle() 메소드이다.
    이 메소드는 Request와 Response 오브젝트와 별개로 Command 오브젝트를 넘겨 받는다.

    UserInfo.java

    				
    

    UserInfo.java

    				
    public class UserInfo{
    
        private String username;
        // Getters and Setters here.
    
    
    }
     다. Simple Form Controller
    이 컨트롤러는 다양한 정보를 포함하는 폼을 채우거나 서브미트하기 위한 목적으로 사용된다.
    간단한 예를 들자면 클라이언트에게 empName, empAge ,empSalary 값을 보여주기 위한 요청 페이지로 
    empInfo 라 불리는 jsp 요청 페이지가 있다고 가정하고 만약 성공하면 클라이언트에게 empSuccess.jsp 
    페이지를 보여준다고 하자. 이러한 종류의 기능을 얻기 위해 Simple Form Controller 를 어떻게 이용하는지
    살펴보자.
    먼저 클라이언트 입력값들을 모으기 위해 getter와 setter가 포함된 commamd 오브젝트를 작성한다.
    아래는  작성된 EmpInfo라 불리는 클래스의 스켈리톤 클래스이다.

    EmpInfo.java

    				
    
    public class EmpInfo{ private String empName; private int empAge; private double empSalary; // Getters and setters for the above properties. }
    다음으로 SimpleFormController를 상속한 클래스를 작성한다. 그러나 이번에는 doSubmitAction() 메소드
    를 오버라이드한다.이것은 클라이언트가 폼을 서브미트할때 불리어질 메소드이다.

    EmpFormController.java

    				
    
    public class EmpFormController extends SimpleFormController{ public EmpFormController(){ setCommandClass(EmpInfo.class); } public void doSubmitAction(Object command){ EmpInfo info = (EmpInfo)command; process(info); } private void process(EmpInfo info){ //Do some processing with this object. } }
    클라이언트로부터 정보를 수집하는 폼은 empInfo.jsp이고 성공하면 empSuccess.jsp가 보여진다. 이 정보는
    컨트롤러 클래스로부터 구체화 되고 아래 처럼 환경파일에서 유지된다.				
    
    				
    <bean id = "empForm" class="EmpFormController">
    
        <property name="formView">
            <value>empInfo</value>
        </property>
    
        <property name="successView">
            <value>empSuccess</value>
        </property>
    
    </bean>
    	

    위에서 보면 formView와 successView 라는 이름을 가진 2개 프로퍼티 명에 주목할 필요가 있다.
    이러한 프로퍼티는 클라이언트에게 보여주게될 초기 뷰와 성공후 보여주게될 마지막 뷰를 나타낸다.
     
    2.Model And View
    Model And View(org.springframework.web.servlet.ModelAndView class 에서 제공) 는 컨트롤러 
    오브젝트에 의해 Dispatcher Servlet에게 리턴된다. 이 클래스는 모델과 뷰 정보를 가지고있는 클래스이다.
    모델 오브젝트는 정보를 보여주는 View 에 의해 사용될 정보들을 제공한다. 이러한 오브젝트들은 
    Spring Framework에서 고도의 추상화로 제공 된다.
     
    어떤 종류의 View 기술도 프레임워크에 쉽게 플러그인 될수 있다. 예를들자면 Excel, pdf, xslt, 
    Free maker, html, velocity 등 웹프레임워크를 지원한다. 
    모델 오프젝트(org.springframework.ui.ModelMap에서 제공)는 정보를 저장하기 위해 내부적으로 Map
    으로 유지된다.
     
    다음은 Model 과 View 오브젝트를 만들기 위한 방법이다.
    View pdfView = ? Map modelData = new HashMap(); ModelAndView mv1 = new ModelAndView(pdfView, modelData);
    위 소스에서는 모델오브젝트와 실제 View 오브젝트를 변수로 받아서 ModelAndView 오브젝트가
    생성된다.
     
    ModelAndView mv1 = new ModelAndView("myView", someData);

    위 예에서 "myView" 라는 스트링이 View 에게 넘겨진다. 이것은 논리적 뷰라 불리는 뷰를 명시하는
    방법이다. 이것은 myView 가 myView.jsp, myView.pdf, myView.xml 중 어떤 것을 가리킬 수 있다는
    것을 의미한다. 논리적 뷰와 일치되는 물리적 뷰의 위치는 환경 파일에서 설정된다.
     
    3. View Resolver
    위에서 논리적 뷰와 논리적 뷰에 대한 물리적 뷰 위치에 대해서만 얘기를 했다.
    논리적 이름과 물리적 뷰 위치 사이의 맵핑은 View Resolver 오브젝트에 의해 다루어진다.
    우리는 org.springframework.web.servlet.ViewResolver 인터페이스를 구현해서
    커스텀 뷰 리졸버도 작성 가능하다.
    다음은 스프링에서 제공하는 활용 가능한 리졸버이다.
  • BeanNameViewResolver
  • FreeMarkerViewResolver
  • InternalResourceViewResolver
  • JasperReportsViewResolver
  • ResourceBundleViewResolver
  • UrlBasedViewResolver
  • VelocityLayoutViewResolver
  • VelocityViewResolver
  • XmlViewResolver
  • XsltViewResolver
  • 우리는 가장 많이 사용되는 Internal Resource View Resolver  와 Bean Name View Resolver
    에 대해서만 자세히 살펴볼것이다.

    가. Internal Resource View Resolver
      Internal Resource View Resolver 는 ModelAndView 오브젝트 형태로 컨트롤러 오브젝트에 의해
    리턴될때 리소스의 논리적 이름과 물리적 위치를 맵핑한다. 다음은 서로다른 ModelAndView
    오브젝트를 리턴하는 예제 소스이다.

    MyController.java

    public class MyController {

        public void handle(){
            if(condition1()){
                return new ModelAndView("myView1");
            }else if (condition2()){
                return new ModelAndView("myView2");
            }
            return new ModelAndView("myView3");
        }
    }

    만약 클라이언트 요구가 조건 1을 만족했다고 가정하면 클라이언트 요청에 대해 myView1이 보여지게 될것이고
    조건2나 나머지는 각각 myView2와 myView3를 보여줄것이다.

    이것을 만족 시키기 위해서는 환경파일에 아래와 같이 설정되어져야 한다.
       

    <bean id="viewResolver" class="org.springframework.web.servlet.view.
    InternalResourceViewResolver">

        <property name="prefix"><value>/WEB-INF/</value></property>
        <property name="suffix"><value>.jsp</value></property>

    </bean>

    지금까지 Internal Resource View Resolver가 논리적 뷰 이름을 물리적 위치에 맵핑하는 방법을 얘기했다.
    논리적 뷰 이름이 myView1일때 리졸버는 prefix+논리적뷰이름+suffix이름의 합으로 뷰 이름을 만들것이다.
    즉 /WEB-INF/myView1.jsp가 될것이다. myView2와 myView3도 같은 방식으로 뷰 이름이 생성된다.

    나. Bean Name View Resolver
    Internal Resource View Resolver의 단점 중의 하나는 View 파일의 이름(jsp던 pdf던)이 웹 어플리케이션
    컨텍스트에서 제공되어져야 한다는 것이다.다이내믹하게 만들어진 뷰 파일은 가능하지 않을 수 있다. 그런 경우에는
    우리는 pdf나 엑셀 포맷으로 다이내믹하게 View 페이지를 만들기 위해 Bean Name View Resolver
    사용해야 한다.

    만약 ModelAndView 오브젝트가 아래 소스에서 보여지는 "pdf"이름의 뷰를 생성한다면 아래와 같다.

    return ModelAndView("pdf")

    그리고 만약 우리가 pdf 파일의 뷰를 만들기를 원하면 환경 파일에 아래처럼 설정해야한다.

    <bean id="beanNameResolver"
    class="org.springframework.web.servlet.view.BeanNameViewResolver"/>

    위 코드는  BeanNameViewResolver 를 사용하기 위해 환경파일을 설정한것이다. 논리적 이름 'pdf'가 빈 이름을
    결정해야 하기 때문에 환경 파일에 아래처럼 정의 해야 한다.
    아래 소스 코드의 MyPdfGenerator 는 pdf 파일을 생성하기 위한
    org.springframework.web.servlet.view.document.AbstractPdfView 의 서브 클래스이다.

    <bean id = " pdf " class = "MyPdfGenerator"/>


    출처 - http://run4dream.tistory.com/entry/3Spring-MVC-%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B8%B0







    'Framework & Platform > Spring' 카테고리의 다른 글

    Spring - @ModelAttribute  (0) 2012.05.21
    Spring - @RequestParam  (0) 2012.05.21
    Spring - contextConfigLocation  (0) 2012.05.16
    Spring - 기초 설정 - xml별 역할  (0) 2012.05.16
    Spring mvc에서 Quartz 적용하기  (1) 2012.05.16
    Posted by linuxism
    ,

     

    [jQuery] Eclipse Aptana Plugin 설치

    Ajax / jQuery / JavaScript/팁, 에러 2012/03/06 12:53


    work with :
     http://download.aptana.org/tools/studio/plugin/install/studio


    설치방법 :

    1.
    이클립스 상단 메뉴 Help - Install New Software 들어가서 위의 work 주소를 입력하여 플러그인을 다운받아 설치한다.

    2.
    설치가 끝난 후에 Help - Install Aptana Features 들어간다.



    3.
    아래와 같이 선택후 jQuery 서포트를 설치한다.

     


    4.
    설치가 끝났으면 이클립스를 재시작 jQuery 어시스트를 설정해준다.
       
    이클립스 상단메뉴 Window - Preferences - Aptana - Editors - JavaScript - Code Assist



    5. jQuery
    동작을 확인하기 위한 프로젝트를 생성한다.

     

    6.
    아래와 같은 코드를 입력하고 제대로 동작되는지 확인한다.

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>New Web Project</title>
            <script type="text/ecmascript" src=lib/jquery/jquery-1.4.2.js></script>
            <script type="text/ecmascript">
              $(document).ready(function(){
                  alert("Hello jQuery!!");
              });   
          </script>

        </head>

        <body>
            <h1>New Web Project Page</h1>
        </body>
    </html>

     

     

    출처 - http://warmz.tistory.com/643

     

     

     

    이클립스(eclipse) + Aptana 이용하여 JSP 개발하기  Ajax, Javascript / Dream 

    2010/07/29 04:18

    http://onedays.co.kr/90092503023

    이클립스만으로 JSP 개발이 가능하지만 무엇보다 짜증나는 것은 javascript와 CSS 이다.

    코드완성 기능이 없기 때문에 가장 애를 많이 먹고 있다(엄청난 짜증이...) 그래서 고심한 결과 Aptana를 이용하기로 했다. 그나마 CSS나 javascript는 Aptana가 최고 인듯 하다. 그리고 일단 무료라는 점에서.... ㅎㅎㅎㅎㅎ 중요한 것은 이클립스에 Aptana를 설치하는 일이다.

       

       

    이름은 알아서들 사용하길 바라고, 일단 위의 주소를 통해서 Aptana를 다운 받는다. 다른 주소도 있다.

       

     Name: Aptana2

     Location: http://update.aptana.com/update/studio/3.2/

       

    차이는 분명히 존재하겠지만, 일단 내가 설치했던 것은 첫번째 것으로 설치하였다.

    깔끔하게 설치하고 난뒤(설치는 어케하는지 다 알거라고 생각하고 패스~)

       

    위의 사진에서처럼 Help에서 "Install Aptana Features..." 를 클릭한다. 다른것을 설치하는게 아니고 javascript 파일하고 그외 거기에 사용할 라이브러리를 설치하고 하기 위함이다. 설치하기 싫은 사람은 안해두 되지만 무엇보다 가장 많이 사용하는 "JQuery"와 "Prototype"를 위해서라면 꼭 설치하길 바란다. 개인적으로 야후에서 지원하는 "Yahoo! User Interface (YUI)"도 추천하고 네이버에서 오픈소스로 공개된 "JINDO"도 매우 적극적으로 추천한다. 그런 것을 이용하면 개발하기가 무척이나 쉬워지므로 자신이 알아서(?) 설치하길 바라며, 일단 여기서 설치해야 할 것을 설치해보도록 하자.

    위와같이 체크한 후에 설치한다!

    그리고 나면 Aptana를 사용할 준비가 모두 완료되었다!

    그러면 Aptana를 사용할 파일 확장자를 선택하자. 이렇게 설정되어지면 CSS 파일과 javascript 파일이 열릴때 Aptana 에디터로 열어지게 되어 쉽게 사용이 가능하다. 먼저 "Preferences"에 들어가야 하는데 "Window" 안에 있으므로 클릭하고 들어간다. 그리고 다음과 같이 들어간다.

    잘 안보이면 다음을 참조한다.

       

     General -> Editors -> File Associations

       

    그리고 "File types"에서 "*.css" 파일을 클릭하고 밑의 "Associated editor" 항목에서 "Aptana CSS Editor"를 클릭하고 오른쪽에 있는 "Default"를 누른다. 그리고 "File types"에서 "*.js"를 선택하고 "Aptana JS Editor"를 선택하고 오른쪽에 있는 "Default"를 누른다. 그러면 기본적으로 이 두개의 파일은 Aptana를 통해서 열리게 된다. 그러면 코드 완성기능과 CSS파일에 색생값으로 구분되어 보다 편하게 개발할 수 있다!

    [출처] 이클립스(eclipse) + Aptana 를 이용하여 JSP 개발하기|작성자 프리돔

    'Development > jQuery' 카테고리의 다른 글

    jQuery - URL을 파싱  (0) 2012.05.29
    jQuery - 플러그인 모음  (0) 2012.05.29
    jQuery - Url Parameter 추출  (0) 2012.05.29
    jquery - function 사용법  (0) 2012.05.23
    jQuery - form 데이터 유효성 검사  (0) 2012.05.23
    Posted by linuxism
    ,


    지도 API 상업적용도 사용 정책(Google, Naver, Daum)

    Google

    ※ 사용제한 항목

    1. 유료회원제 사이트인경우(유료로 가입하지 않으면 이용이 안되는 사이트)
    2. 사내인트라넷과 같은 비공개 사이트
    3. 자산(부동산등), 차량추적을가지는 사이트(말하자면 내비게이션)

    위에 해당하는 경우 연간 1만불정도의 프리미엄 서비스에 가입 요함.

    http://code.google.com/intl/ko-KR/apis/maps/faq.html#geocoder_limit


    Daum

    무료사용가능

    1. 개인, 법인(정부기관, 정부투자기관 등 일반 사기업이 아닌 모든 법인 제외)인 경우
    2. 웹사이트(웹브라우저를 이용하여 접속 가능한 것에 한함)에서 1일 기준 10만 PV(Page View) 미만으로 사용하는 경우
    3. 웹사이트(웹브라우저를 이용하여 접속 가능한 것에 한함)에서 1일 기준 1만 쿼리(Query) 미만으로 사용하는 경우
    4. 지도 인쇄물 배포를 목적으로 하는 경우 동일하거나 동일한 것을 일부 수정한 것에 대해 1,000부 미만을 배포하는 경우
    5. 비상업적 목적의 경우
    6. 기타 회사가 이용을 제한하거나 금지하지 않는 경우 

    사전협의 후 가능

    1. 정부 및 정부투자기관에서 사용하는 경우
    2. 1일 기준 10만 PV(Page View) 이상 사용하는 경우
    3. 1일 기준 1만 쿼리(Query) 이상 사용하는 경우
    4. 웹사이트 이외의 어플리케이션에서 사용하는 경우
    5. 차량, 배송, 물류 등 운송수단과 관련된 시스템에서 사용하는 경우
    6. CRM, 관제 등 기업용 시스템에서 사용하는 경우
    7. 지도 인쇄물 배포를 목적으로 하는 경우 동일하거나 동일한 것을 일부 수정한 것에 대해 1,000부 이상을 배포하는 경우
    8. 광고나 유료서비스 등의 상업적인 목적으로 사용하는 경우
    9. 제1호 내지 제8호 이외의 회사가 별도로 정하는 경우


    Naver

    Q&A 내용 중

    9. Open API의 상업적인 용도의 사용의 의미는 무엇인가요?


    네이버 Open API 사용에 있어서 제한을 두고 있는 '상업적 용도의 사용은 네이버 Open API를 이용한 직접적인 수익사업을 벌이는 경우를 의미합니다.
     이는 다양한 매쉬업을 통하여 제휴사 사이트에서 수익을 내는 것을 금지한다는 뜻이 아니라, Open API를 이용하여 키워드 광고, 배너 광고 등을 유치한다거나 Open API를 활용한 서비스를 보여주는 대가로 사용자에게 과금을 하는 등의 직접적인 수익사업과의 연계를 의미합니다.
     즉, 법인 사용자나 상업적 사이트에서도 위 사항에 반하지 않는다면 네이버 Open API를 자유롭게 사용하실 수 있습니다.

    ex)
    - 상업적인 사용으로 판단되는 경우
    1) Open API를 활용한 검색기능을 제공하는 사이트에서
        스폰서 링크, 파워 링크 등의 유료 등록 사이트를 검색결과의 상단에 노출하여 수익을 내는 경우
    2) 각 메뉴를 사용함에 있어서 과금을 하는 형태의 지역정보 사이트에서
        네이버 지도 API를 통한 지도 보기 서비스에 과금하는 서비스를 제공하는 경우

    - 상업적인 사용이 아닌 경우
    1) 물품 판매로 수익을 창출하는 인터넷 쇼핑몰 사이트에서 
        네이버 지식iN, 블로그 검색 API를 활용하여 쇼핑 물품에 대한 검색 결과를 제공하여 주고자 하는 경우
    2) 부동산 관련 유료 정보 제공 사이트에서
       등록된 부동산 매물 정보의 위치를 보여주기 위한 부가 서비스로서의 네이버 지도 API를 활용하는 경우


    출처 - http://wang666-textcube.blogspot.com/2010/11/%EC%A7%80%EB%8F%84-api-%EC%83%81%EC%97%85%EC%A0%81%EC%9A%A9%EB%8F%84-%EC%82%AC%EC%9A%A9-%EC%A0%95%EC%B1%85google-naver-daum.html



    Posted by linuxism
    ,