|
[What is Struts?]
1. Craig McClanahan에 의해 개발 2. Apache Software Foundation Project 3. 오픈 소스 웹 애플리케이션 프레임워크 - XML 기반의 컨트롤러 서블릿. - End-to-End J2EE 어플리케이션 프레임워크 아님. 4. MVC 패턴 기반 5. 타 프레임워크와 연동 가능 - Velocity, iBatis, Hibernate, XSLT, Spring, Expresso, ADF …. 6. 웹 애플리케이션 개발 시 Common problems 해결 - common infrastructure service 제공 7. 중, 대형 규모의 웹 애플리케이션 개발에 적합. ![]() 1. 변경. MVC는 변경을 관리하는 디자인 패턴이다. 2. 비즈니스 로직 및 데이터와 인터페이스를 분리한다. 3. 다음 세 가지 범주로 나누어서 싱글 모듈 방식으로 문제를 해결한다. 모델(Model) 모델에는 애플리케이션 기능의 핵심이 포함된다. 이 모델은 애플리케이션의 상태를 캡슐화 한다. 모델(model)은 뷰나 컨트롤러를 볼 수 없다. 뷰(View) 뷰는 모델의 표현이라고 할 수 있다. 애플리케이션의 외양이다. 뷰는 모델 게터(getter)에 액세스 할 수 있지만 세터(setter)에 대해서는 모른다. 컨트롤러를 볼 수 없다. 뷰는 모델이 변경될 때 공지를 받는다. 컨트롤러(Controller) 컨트롤러는 사용자 인풋에 반응을 한다. 모델을 구현하여 설정한다. ![]() ![]() ■ 무거운 HTML-자바 커플링(coupling) JSP 파일을 코딩하는 사람은 페이지 디자이너와 자바 개발자여야 한다. 그렇지 않을 경우 끔찍한 자바 코드가 되거나 엉망이 된 페이지가 나올 수 있다. ■ 자바와 JavaScript 오염 페이지가 커지면서 몇 개의 JavaScript를 구현하게 된다. JavaScript가 페이지에 나타나면 이 스크립트는 자바 코드와 혼돈이 된다. 대표적인 예로 클라이언트측 JavaScript를 사용하여 email 필드를 검사하는 경우이다. ■ 삽입된 플로우 로직 이 애플리케이션의 전체 흐름을 이해하려면 모든 페이지를 봐야 한다. 100 페이지나 되는 웹 사이트의 스파게티 로직(spaghetti logic)을 상상해 보라. ■ 디버깅 문제점 HTML 태그, 자바 코드, JavaScript 코드가 모두 한 페이지에 있으면 디버깅 하기도 어렵다. ■ 강결합 비즈니스 로직 또는 데이터를 변경하려면 여기에 개입된 모든 페이지를 다 변경해야 한다는 의미가 된다. ■ 미학 시각적으로 큰 페이지에서 이런 식의 코딩은 난잡해보인다. Microsoft ASP를 개발 할 때 1000 라인 페이지를 늘상 보았다. 심지어 신택스 컬러링(syntax coloring)으로도 읽고 이해하기 힘들었다. [모델2 개발 방식] - 장점 : 유지보수 비용이 적다, JSP 소트코드와 디자인의 분리. - 단점 : 배우기 어렵다, 개발속도가 모델1에 비해 느리다. - 적용범례 : 장기개발, 적정한 개발 인력, 변경의 유동성. ![]() 서블릿과 JSP를 사용하는 Model-View-Controller 구현인 Struts를 소개한다. Struts로 웹 프로젝트의 변경을 관리한다. Struts로 시스템을 구현하지 않더라도 Struts를 이해한다면 서블릿과 JSP 구현에 많은 도움을 받을 수 있다. 1. 재사용 성이 부족했던 많은 부분들을 재사용이 가능하게 미리 만들어 놓은 프레임워크. 2. JSP와 Action 클래스 사이의 매핑을 소스가 아닌 XML을 이용하며 새로운 Action 클래스가 추가될 경우, 소스의 수정 없이 XML 파일에 JSP와 Action 클래스를 매핑해준다. 3. Command (ActionServlet)와 Model (Action & ActionForm)의 관계 ![]() Struts Controller는 이벤트를 클래스에 매핑하는 서블릿이다. 그리고 컨트롤러는 설정 파일을 사용하기 때문에 값을 코딩 할 필요가 없다. 삶은 변했지만 상황은 똑같다. ActionServlet은 MVC 구현의 Command 부분이고 Framework의 핵심이다. ActionServlet (Command)은 Action, ActionForm ,ActionForward를 만들어서 사용한다. struts-config.xml 파일은 Command를 설정한다. 웹 프로젝트를 만드는 동안 Action과 ActionForm은 특정 문제 공간을 해결하기 위해 확장된다. struts-config.xml 파일은 ActionServlet에게 확장 클래스를 사용하는 방법에 대해 알려준다. 이 방식은 여러 가지 장점이 있다. 1) 이 애플리케이션의 전체적인 논리적 흐름은 계층적 텍스트 파일에 존재한다. 큰 애플리케이션의 경우 보고 이해하기가 더 쉽다. 2) 페이지 디자이너는 애플리케이션의 흐름을 이해하기 위해 자바 코드를 모두 다 볼 필요가 없다. 3) 자바 개발자는 흐름을 변경할 때 코드를 재 컴파일 하지 않아도 된다. 명령어 기능은 ActionServlet를 확장하여 추가할 수 있다. #요약# 1. 모든 Http 요청을 받아서 해당 Module의 RequestProcessor에게 전달. 2. Configuration XML을 통해서 메타 데이터 Lookup.(web.xml, struts-config.xml, validation.xml …) ■ RequestProcessor - 하나의 애플리케이션 모듈당 하나의 인스턴스 생성됨. - Locale과 Content Type 처리. - 자동으로 Rquest 파라미터로 Java Beans(Form class)를 populate함. - URI에 해당하는 Action class 실행. ■ ActionForm 클래스 ActionForm은 웹 애플리케이션의 세션 상태를 관리한다. ActionForm은 각각의 인풋 형식 모델에 대해 하위 클래스로 분류된 추상 클래스이다. 내가 인풋 형식 모델(input form model)을 언급한다면 ActionForm이 HTML 형식에 의해 설정 및 업데이트 되는 일반적인 데이터 개념을 나타내는 것을 의미한다. 예를 들어, HTML 형식에 의해 설정 UserActionForm을 가질 수 있다. 1) Struts는 UserActionForm의 존재 여부를 확인한다. 없을 경우, 이 클래스의 인스턴스를 만든다. 2) Struts는 HttpServletRequest의 상응하는 필드를 사용하여 UserActionForm의 상태를 설정한다. request.getParameter()호출이 더 이상 필요 없다. 예를 들어, Struts 프레임웍은 요청 스트림에서 fname을 취해서 UserActionForm.setFname()을 호출한다. 3) Struts 프레임웍은 UserAction으로 전달하기 전에 UserActionForm의 상태를 업데이트 한다. 4) Action 클래스로 전달하기 전에 Struts는 UserActionForm에 validation() 메소드를 호출하여 상태 밸리데이션을 수행한다. 주의: 이 방법이 언제나 옳은 것은 아니다. 다른 페이지나 비즈니스 객체에서 UserActionForm을 사용하는 방법도 있다. 이때 밸리데이션은 달라진다. 상태에 대한 밸리데이션은 UserAction 보다 낫다. 5) UserActionForm은 세션 레벨에서 관리될 수 있다. ■ Action 클래스 Action 클래스는 비즈니스 로직 주위에 있는 래퍼이다. Action 클래스의 목적은 HttpServletRequest를 비즈니스 로직 으로 변환하는 것이다. Action을 사용하려면 process() 메소드를 하위 클래스로 분류하여 process() 메소드를 겹쳐 쓴다. ActionServlet(Command)은 매개변수화 된 클래스들을 perform() 메소드를 사용하여 ActionForm으로 전달한다. 더 이상 request.getParameter() 호출은 없다. 이벤트가 여기에 올 때 까지 인풋 형식 데이터(HTML 형식 데이터)는 요청 스트림 밖에서 이미 변환되어 ActionForm 클래스로 들어간다. ![]() 1. 프리젠테이션과 비즈니스 티어 간의 bridge 역할 수행. 2. 애플리케이션 당 하나의 인스턴스. 3. org.apache.struts.action.Action 클래스 상속하고 execute 메소드를 구현. 4. 처리 결과에 따른 Page Flow 기능 수행.(ActionForward 리턴) ■ ‘Pre-Built’Action 클래스 ForwardAction, DispatchAction, LookupDispathcAction, IncludeAction, SwitchAction ■ Action 클래스 다이어그램 ![]() ![]() [Struts MVC 구현] ![]() ■ Struts 개요 Action 클래스를 Adapter 디자인 패턴으로서 생각할 수 있다. Action의 목적은 "클래스의 인터페이스를 클라이언트가 ■ Error 클래스 ■ ActionMapping 클래스 ■ ActionMappings ![]() ■ ActionMappings 이 글과 관련있는 글을 자동검색한 결과입니다 [?]
|
메모장
이글루 파인더
카테고리
전체
Agile Methodology Design Patterns JAVA Frameworks Open API DB관련 개발Tool System Web Server HTML/SCRIPT Talk Talk My Life 생활의 발견 허슬 두산! Fun Fun!!! 즐겨찾기 준비중 방명록 최근 등록된 덧글
우하하-_-' 유용해서 ..
by 미나 at 11/20 함께 생각하고 행동할 수.. by 강민철 at 10/21 신입개발자 인데 미흡한.. by seo at 10/13 유용한 정보 감사합니다.. by Nerv\\\'s at 09/23 저도 좋은글 담아갑니다.. by 풍 at 09/18 ㅎㅎㅎㅎ 저는 지금 개.. by 이종화 at 08/19 디자인패턴 공부하려는데.. by 이현승 at 07/22 좋은 글 잘 봤습니다. .. by 김진학 at 06/29 좋은글 감사합니다. 유.. by 엄성권 at 03/11 좋은 글 보고 갑니다. 제.. by 우기 at 01/10 최근 등록된 트랙백
Soma buy soma chea..
by Watson soma cheap. Buy soma online. by Buying cheap soma f.. Retin a. by Retin a and lip rhytid.. joinc wiki::소프트웨어.. by yundream의 프로그래.. 내 손안의 PC - 자바가 .. by 上善若水 저도 agile에 관심이 많.. by lovelove님의 이글루 JUnit 4로 뛰어들기 by 고안해 내는 재능 inheritnace vs dele.. by Bullshit Life framework = framewor.. by 고안해 내는 재능 Struts iBATIS Spring by 고안해 내는 재능 포토로그
이전블로그
이글루링크
라이프로그
| |||