아파치 태피스트리
Apache Tapestry![]() | |
원저작자 | 하워드 루이스 배 |
---|---|
개발자 | Apache 소프트웨어 재단 |
안정된 릴리스 | |
저장소 | 태피스트리 저장소 |
기입처 | 자바 |
운영 체제 | 크로스 플랫폼(Java 가상 머신) |
유형 | 웹 응용 프로그램 프레임워크 |
면허증. | Apache 라이센스 2.0 |
웹 사이트 | tapestry |
Apache Tapestry는 JavaServer Faces 및 Apache Wicket과 [2]개념적으로 유사한 오픈 소스 구성 요소 지향 Java 웹 애플리케이션 프레임워크입니다.태피스트리는 Howard Lewis [when?]Ship에 의해 개발되었으며 Apache Software Foundation에 의해 2006년 [3]최상위 프로젝트로 채택되었습니다.
Tapestry는 단순성, 사용 편의성 및 개발자 생산성을 강조합니다.Configuration에 대한 Configuration 패러다임을 준수하여 거의 모든 XML 구성을 [4]제거합니다.Tapestry는 웹 페이지 상의 각 사용자 인터페이스 컴포넌트(개체)와 대응하는 Java 클래스 간에 강력한 바인딩을 함으로써 웹 개발에 모듈러 방식을 사용합니다.이 컴포넌트 기반 아키텍처는 WebObjects에서 [5]많은 아이디어를 차용합니다.
특장점
- 라이브 클래스 새로고침
- Tapestry는 Java 페이지 클래스, 컴포넌트 클래스, 서비스 구현 클래스, HTML 템플릿 및 컴포넌트 속성 파일에 대한 변경 사항을 파일 시스템에서 모니터링하여 재시작 없이 실행 중인 응용 프로그램으로 변경 사항을 핫 스왑합니다.이를 통해 매우 짧은 코드 저장-뷰 피드백 사이클이 제공되므로 개발자의 [6]생산성이 크게 향상됩니다.
- 컴포넌트 베이스
- 페이지는 각각 템플릿과 컴포넌트 클래스가 있는 작은 네스트 가능한 컴포넌트로 구성할 수 있습니다.커스텀 컴포넌트는 [7]구축이 간단하다고 합니다.
- 구성에 대한 규칙
- 태피스트리는 XML이 아닌 명명 규칙과 주석을 사용하여 [8]응용 프로그램을 구성합니다.
- HTTPS 세션의 스페어 사용
- Tapestry는 HTTPSession 사용을 최소화함으로써 클러스터화된 세션 [9]복제 환경에서 매우 효율적이 되도록 설계되었습니다.
- 투고/리다이렉트/가져오기
- 대부분의 폼 전송은 Post/Redirect/Get(PRG; 포스트/리다이렉트/가져오기) 패턴을 따릅니다.이를 통해 여러 폼 전송 사고가 감소하고 URL이 보다 친근해지고 즐겨찾기가 쉬워지며 브라우저의 Back 버튼과 Refresh 버튼이 정상적으로 [10]동작합니다.
- 제어 반전(IoC)
- Tapestry는 Google Guice와 유사한 경량 Inversion of Control 레이어에 구축되어 있지만 Tapestry 동작의 거의 모든 측면을 구성 [8]및 대체 가능하도록 설계되었습니다.
Hello World의 예
최소한의 템플릿화된 Tapestry 애플리케이션에는 다음 3개의 파일만 필요합니다.
- HelloWorld.tml
- /hellowold 페이지의 (X)HTML 템플릿.태피스트리 템플릿에는 적절한 형식이 포함될 수 있습니다(X).HTML 마크업
<!DO3}PE html> <body xmlns="http://www.w3.org/1999/xhtml" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"> <body> <p> 안녕하세요, ${body} </body> </body>
- HelloWorld.java
- 템플릿과 관련된 페이지 클래스.여기서는 템플릿이 액세스할 수 있는 *username* 속성만 제공합니다.
패키지 org.disc.pages; /** 페이지 클래스(같은 이름의 템플릿 파일과 자동으로 관련지어짐)*/ 일반의 학급 안녕 세계 { /** 평범한 게터 */ 일반의 스트링 사용자 이름 가져오기() { 돌아가다 "세계"; } }
<?xml version="1.0" encoding="UTF-8"?> <!DOSCTYPE 웹 앱 PUBLIC -//Sun Microsystems, Inc.//DTD 웹 애플리케이션 2.3/EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>태피스트리 Example<, /display-name>,<>context-param>,<>!--텔 태피스트리 5이 페이지, 구성 요소와 믹스인 등을 찾기 위해--><>param-name>, tapestry.app-package<, /param-name>,<>param-value>, org.example.demo<, /param-value>,<>/context-param>,<>filter>,<>!--태피스트리 서블릿 필터를 정의합니다.--><>필터이다.-name>, app<, /filter-name>,<>filter-class>, org.apache.tapestry5.TapestryFilter </filter-class> </filter> </filter-mapping> <!-- Tapestry 서블릿필터에 송신하는 요구를 서블릿컨테이너에 지시합니다.</filter-name> </filter-pattern> </filter-pattern> </web-app>
클래스 변환
Tapestry는 바이트 코드 조작을 사용하여 실행 시 페이지 및 컴포넌트 클래스를 변환합니다.이 접근방식을 사용하면 페이지 및 컴포넌트클래스를 단순한 POJO로 작성할 수 있으며, 몇 가지 명명 규칙과 주석이 클래스 로드 시 상당한 추가 동작을 유발할 수 있습니다.태피스트리 버전 5.0, 5.1 및 5.2에서는 Javassist 바이트 코드 조작 라이브러리를 사용했습니다.이후 버전에서는 Javassist가 ObjectWeb ASM을 [11][12]기반으로 하는 Plastic이라는 새로운 바이트 코드 조작 레이어로 대체되었습니다.
클라이언트 측 지원
Tapestry 5 버전부터 5.3까지는 Ajax 운영을 지원하기 위해 Tapestry 고유의 라이브러리와 함께 프로토타입 및 script.aculo.us JavaScript 프레임워크를 번들했습니다.서드파티 모듈은 프로토타입/스크립트 작성 대신 또는 추가로 jQuery를 통합할 수 있습니다.
버전 5.4부터, Tapestry는 내장된 컴포넌트의 프로토타입 의존성을 제거하는 새로운 JavaScript 계층을 포함하므로 jQuery 또는 다른 JavaScript 프레임워크를 [13]연결할 수 있습니다.
버전 5.4에서는 Require를 사용한 JavaScript 모듈 지원도 도입되었습니다.JS 모듈 로딩 시스템.
핵심 원칙
Tapestry 프로젝트 문서에서는 2008년 [14]버전5부터 시작하여 Tapestry의 모든 개발 결정을 관리하는 4가지 "원칙"을 인용하고 있습니다.
- Static Structure, Dynamic Behavior: 페이지 및 컴포넌트 구조는 기본적으로 정적이므로 큰 페이지 및 컴포넌트 트리를 작성(및 세션메모리에 저장)할 필요가 없습니다.
- Adaptive API - 프레임워크는 코드가 프레임워크에 적응하는 것이 아니라 코드에 적응하도록 설계되어 있습니다.
- 퍼블릭과 퍼블릭의 구별내부 API: 반드시 공개되어야 하는 API를 제외한 모든 API는 명시적으로 "내부"(프라이빗)입니다.
- 하위 호환성 확인: Tapestry 개발자들은 항상 최신 버전의 Tapestry로 쉽게 업그레이드할 수 있도록 노력하고 있다고 합니다.
비판
태피스트리는 메이저버전에 걸쳐 하위 호환성이 없다는 비판을 받고 있습니다.특히 버전4에서 버전5로의 이행에서는 기존 [15]어플리케이션에서 클린 이행 경로를 사용할 수 없었습니다.프로젝트 팀원들은 이를 과거 태피스트리 사용자의 주요 문제로 인식하고 있으며, 향후 태피스트리의 주요 설계 목표는 이전 버전과의 호환성이었다.버전 5의 개발 초기부터 하위 호환성은 Tapestry의 4가지 새로운 "핵심 원칙" 중 하나로 나열되었으며, 나머지 3가지 중 2개는 하위 호환성을 희생하지 않고 프레임워크의 진화를 가능하게 하기 위한 것이었다.프로젝트 팀원들은 5.0 이후의 모든 Tapestry 릴리스는 하위 호환성이 매우 높다고 주장합니다.
태피스트리 5에 대한 초기 비판에서도 문서화를 단점으로 언급했습니다.현재 프로젝트 구성원들은 이 결함이 완전히 개정 및 업데이트된 사용자 가이드 및 기타 문서를 통해 대부분 해결되었다고 주장하고 있습니다.
버전 5.0 이후, Tapestry는 프로토타입과 Scriptaculous JavaScript 라이브러리를 번들하고 있습니다.Howard Lewis Ship에 따르면, 2008-2009년 기간에는 이러한 선택들이 합리적인 선택이었다고 합니다.그러나 그 이후 프로토타입의 인기는 하락했고 jQuery의 인기는 급격히 상승했습니다.이에 대응하여 Tapestry 커뮤니티는 jQuery를 프로토타입에 추가하거나 프로토타입 대신 사용할 수 있는 모듈을 개발했습니다.한편, Tapestry의 현재 버전인 5.4는 프로토타입에 대한 의존성을 완전히 제거하여 jQuery 또는 프로토타입(또는 잠재적으로 다른 자바스크립트 프레임워크)을 연결할 수 있는 호환성 계층으로 대체합니다.
다른 프레임워크와의 관계
Howard Lewis Ship에 따르면, Tapestry는 처음에 WebObjects에서 볼 수 있는 일반적인 개념과 접근법 중 일부를 Java에서 구현하기 위한 시도로 생각되었습니다.이것은 당시 Objective-C 및 클로즈드 [16]소스로 작성되었습니다.
Wicket의 창시자인 Jonathan [17]Locke에 따르면 Apache Wicket은 태피스트리 초기 버전의 복잡성에 대한 대응으로 개발되었습니다.
JavaServer Faces의 기본 뷰 기술인 Faces는 "업계 [18][19]표준으로 JavaServer Faces에 의해 지원되는 Tapestry와 같은 프레임워크"의 필요성을 충족시키기 위해 초기 버전의 Tapestry에서 영감을 받은 것으로 알려졌다.
역사
버전 | 날짜. | 묘사 |
---|---|---|
버전 더 이상 보수되지 않음 | 2000 | Howard Lewis Ship이 내부용으로 개발 |
버전, 보수 2.0 | 2002-04 | GNU Lesser General Public [20]License의 Source Forge에서 처음 제공되었습니다. |
버전, 보수 3.0 | 2004-04 | 자카르타 [21]서브프로젝트로서 Apache의 첫 번째 릴리즈. |
버전, 보수 4.0 | 2006-01 | JDK 1.5 주석 지원, 새로운 입력 검증 서브시스템 및 향상된 오류 보고 기능 도입 |
보수 5.0 | 2008-12 | Tapestry 4에서 거의 완전한 개서를 통해 구성보다 규약을 강조하는 새로운 POJO 기반 컴포넌트 모델을 도입하고 Hivemind를 새로운 no-XML Inversion of Control 레이어로 대체했습니다. |
보수 5.1 | 2009-04 | 퍼포먼스와 메모리의 향상, 자동 GZIP 압축, JavaScript 어그리게이션, 그러나 Tapestry 5.0과의 하위 호환성은 유지. |
보수 5.2 | 2010-12 | JSR303 Bean Validation [23]추가.서비스 구현에 대한 확장 라이브클래스 새로고침페이지 [24]풀링 삭제. |
보수 5.3 | 2011-11 | HTML5 doctpe, [25]주입, 성능 및 메모리 개선을 위한 JSR-330 주석, JavaAssist에서 ASM 바이트 코드 조작으로 전환되는 새로운 구성 요소에 대한 지원 추가 |
버전, 보수: 5.3.1 - 5.3.8 | 2012-2014 | 버그 수정 및 마이너 확장 |
5.4-5.4.5 | 2015-2019 | 주요 클라이언트 측 확장 기능전환 가능한 jQuery/Protype 지원을 위한 새로운 JavaScript 계층은 JavaScript 모듈 시스템에 Require.js를 사용하고 기본 [26]스타일링에는 Twitter Bootstrap을 사용합니다. |
5.5 | 2020-03 | 현재 안정적인 버전입니다.Java 12 바이트 코드, 타입 스크립트 및 부트스트랩4 지원 |
「 」를 참조해 주세요.
레퍼런스
- Drobiazko, Igor (2012), Tapestry 5: Rapid web application development in Java, Igor Drobiazko, p. 482, archived from the original on 2014-12-15, retrieved 2013-01-20
- Kolesnikov, Alexander (January 15, 2008), Tapestry 5: Building Web Applications: A step-by-step guide to Java Web development with the developer-friendly Apache Tapestry framework, Packt Publishing, p. 280, ISBN 978-1-84719-307-0
- Iok Tong, Ka (January 1, 2007), Enjoying Web Development with Tapestry (3rd ed.), p. 497, ASIN B00262M3HS
- Lewis Ship, Howard (2004), Tapestry in Action, Manning, p. 580, ISBN 1932394117
메모들
- ^ a b "News - Apache Tapestry". tapestry.apache.org. Apache Software Foundation. Retrieved 2021-03-25.
- ^ "Howard Lewis Ship of Tapestry interview [part 1] (2012-10-22)". Archived from the original on 2013-01-22. Retrieved 2013-01-28.
- ^ 드로비아즈코 2012, 페이지 1
- ^ "Tapestry Central: Tapestry 5 Updates".
- ^ Tapestry in Action - Howard Lewis Ship의 서문
- ^ "Class Reloading - Apache Tapestry".
- ^ 드로비아즈코 2012, 페이지 20
- ^ a b 드로비아즈코 2012, 페이지 7
- ^ "Performance and Clustering - Apache Tapestry".
- ^ "Forms and Validation - Apache Tapestry".
- ^ "Meeting Plastic I: Introduction Java Magic".
- ^ "Archived copy". Archived from the original on 2013-06-18. Retrieved 2013-02-21.
{{cite web}}
: CS1 maint: 제목으로 아카이브된 복사(링크) - ^ "Tapestry Central: Zeroing in on Tapestry 5.4".
- ^ "Principles". 2010-12-21. Archived from the original on 12 October 2012. Retrieved 2012-10-12.
- ^ "Tapestry5 future compatiblity [sic]". 2009-04-30. Retrieved 2013-01-21.
- ^ "Archived copy". Archived from the original on 2013-01-22. Retrieved 2013-01-28.
{{cite web}}
: CS1 maint: 제목으로 아카이브된 복사(링크) - ^ "Archived copy". www.theserverside.com. Archived from the original on 9 September 2004. Retrieved 11 January 2022.
{{cite web}}
: CS1 maint: 제목으로 아카이브된 복사(링크) - ^ "Archived copy". facelets.dev.java.net. Archived from the original on 6 July 2007. Retrieved 11 January 2022.
{{cite web}}
: CS1 maint: 제목으로 아카이브된 복사(링크) - ^ "Archived copy". www.jsfcentral.com. Archived from the original on 13 January 2013. Retrieved 11 January 2022.
{{cite web}}
: CS1 maint: 제목으로 아카이브된 복사(링크) - ^ "Tapestry: Java Web Components Release 2.0 is Out". Retrieved 2013-01-20.
- ^ "Tapestry 3.0 Final Release". Retrieved 2013-01-20.
- ^ "Tapestry 4.0 Released". Retrieved 2013-01-20.
- ^ "Tapestry and JSR-303 Bean Validation API". 2010-01-04. Archived from the original on 16 April 2010. Retrieved 2010-03-13.
- ^ "Announcing Tapestry 5.2". 2010-12-17. Archived from the original on 14 November 2012. Retrieved 2012-11-14.
- ^ "Using JSR 330 standard annotations - Apache Tapestry".
- ^ "JavaScript Rewrite". Archived from the original on 2012-11-14. Retrieved 2013-01-20.