WT(Web 툴킷)
Wt (web toolkit)원저작자 | 엠웹 |
---|---|
초기 릴리즈 | 1.0.0 / 2005년 12월, | 전 (
안정된 릴리스 | 4.7.1 / 2022년 4월 [1] , 전( |
저장소 | WT 저장소 |
기입처 | C++ |
운영 체제 | 크로스 플랫폼 |
유형 | 웹 프레임워크 |
면허증. | 듀얼 라이선스: |
웹 사이트 | www |
WT ("witty"로 발음)는 C++ 프로그래밍 언어용 오픈 소스 위젯 중심의 웹 프레임워크입니다.Qt 프레임워크와 유사한 API를 가지고 있으며(Boost와 함께 개발되었으며 Qt와 혼합되면 호환되지 않음), 위젯 트리와 이벤트 기반 신호/[2]슬롯 시스템을 사용합니다.
WT의 설계 목표는 기존의 MVC(모델 뷰 컨트롤러) 설계 패턴 대신 데스크톱 애플리케이션 API에서 사용되는 스테이트풀 컴포넌트 모델을 웹 개발에 적용하는 것입니다.따라서 웹 페이지 수준에서 MVC를 사용하는 대신 개별 [3]구성 요소 수준으로 푸시됩니다.
라이브러리는 데스크톱 소프트웨어 개발 프로세스를 사용하지만 다음과 같은 웹 고유 기능을 지원합니다.
- 시멘틱 URL
- 브라우저 기록 탐색
Wt의 특징 중 하나는 브라우저 렌더링 모델의 추상화 레이어입니다.라이브러리는 Ajax와 호환되는 브라우저와의 통신에 Ajax를 사용하고 다른 사용자 에이전트에 대해서는 일반 HTML 형식의 포스트백을 사용합니다.프로그레시브 부트스트랩 방식을 사용하여 사용자 인터페이스는 처음에 플레인 HTML 문서로 렌더링되며, 그 후 브라우저에서 지원되는 경우 Ajax를 사용하도록 자동으로 업그레이드되어 인터랙티브성이 향상됩니다.이 방법으로 WT는 정의상 다음과 같습니다.
임베디드 시스템 환경에서 C/C++의 인기가 높기 때문에 WT는 이러한 디바이스에 자주 사용되고 있으며, 그 결과 퍼포먼스에 매우 최적화되어 있습니다.
주요 기능
- 자동 그레이스 풀 열화 및 점진적 확장
- 서버 시작 이벤트 지원(Comet)
- 통합 렌더링 API(SVG, HTML5 캔버스 요소, VML)
- 클라이언트측 및 서버측 검증
- 사이트 간 스크립팅 및 사이트 간 요청 위조(CSRF) 취약성을 방지하기 위한 다양한 보안 기능이 포함되어 있습니다.
- 콤팩트한 C++ ORM 레이어('Wt:: Dbo') 포함
- Ajax로의 폴백 또는 플레인 웹 페이지 렌더링과 함께 클라이언트-서버 통신 모델에 WebSocket 네트워킹 프로토콜(가능한 경우)을 사용합니다.
상세한 것에 대하여는, 공식 Web 사이트의 「기능」섹션을 참조해 주세요.
코드 예시
WT의 "Hello, World!" 프로그램:
#실패하다 < WT / WApplication >h> #실패하다 <WT/WBreak>h> #실패하다 < WT / WConter Widget >h> #실패하다 < WT / WLine Edit >h> #실패하다 < WT / WPush Button >h> #실패하다 < WT / WText >h> /* * 간단한 hello world 어플리케이션 클래스로 대응 방법을 보여줍니다. * 이벤트, 입력 읽기 및 피드백 제공. */ 학급 Hello 어플리케이션 : 일반의 WT::복제 { 일반의: Hello 어플리케이션(컨스턴트 WT::환경& 부러워하다); 사적인: WT::WLine Edit(편집) *name Edit_; WT::WText(WT 익스텐트) *그리팅_; 무효 환영하다(); }; /* * env 인수에는 새로운 세션에 대한 정보가 포함됩니다. * 첫 번째 요청입니다.WApplication에 전달해야 합니다. * 컨스트럭터이므로 일반적으로 커스텀의 인수이기도 합니다. * 응용 프로그램 생성자. */ Hello 어플리케이션::Hello 어플리케이션(컨스턴트 WT::환경& 부러워하다) : 복제(부러워하다) { setTitle('헬로 월드'); // 응용 프로그램 제목 뿌리()->추가신규격< >WT::WText(WT 익스텐트)>("성함을 말씀해 주세요."); // 텍스트 표시 name Edit_ = 뿌리()->추가신규격< >WT::WLine Edit(편집)>(); // 텍스트 입력 허용 name Edit_->setFocus(); // 초점을 맞추다 자동 단추 = 뿌리()->추가신규격< >WT::WPush 버튼>("안녕하세요."); // 버튼을 만듭니다. 단추->set Margin(5, WT::쪽::왼쪽); // 5픽셀 여백 추가 뿌리()->추가신규격< >WT::wbreak>(); // 줄 바꿈 삽입 그리팅_ = 뿌리()->추가신규격< >WT::WText(WT 익스텐트)>(); // 빈 텍스트 /* * 신호를 슬롯으로 연결합니다. * * - 단순 WT-way: 개체 및 메서드를 지정합니다. */ 단추->클릭했다().연결하다(이것., &Hello 어플리케이션::환영하다); /* * - 바인딩에 유용한 임의의 함수 객체 사용 * 결과 메서드 호출에 대한 std::filength() */ name Edit_->Enter Pressed(입력)().연결하다(표준::묶다(&Hello 어플리케이션::환영하다, 이것.)); /* * - 람다 사용: */ 단추->클릭했다().연결하다([=]() { 표준::cerr << > "안녕하세요" << > name Edit_->본문() << > "\n"; }); } 무효 Hello 어플리케이션::환영하다() { /* * nameEdit_ 필드에 텍스트를 입력하여 텍스트를 업데이트합니다. */ 그리팅_->setText("안녕하세요" + name Edit_->본문()); } 인트 주된(인트 argc, 차 **argv) { /* * 주요 방법에서는 공유 리소스를 설정할 수 있지만, 이 경우 * 수신을 시작하는 서버 애플리케이션(Fast CGI 또는 httpd)을 기동합니다. * 요청 및 모든 응용 프로그램 수명 주기를 처리합니다. * * WRun의 마지막 인수는 인스턴스화할 함수를 지정합니다. * 새로운 응용 프로그램 객체이 기능은 새 사용자가 서프할 때 실행됩니다. * WT 어플리케이션 및 라이브러리가 브라우저를 네고시에이트한 후 * 지원.함수는 새로 인스턴스화된 응용 프로그램을 반환해야 합니다. * 오브젝트 */ 돌아가다 WT::WRun(argc, argv, [](컨스턴트 WT::환경 &부러워하다) { /* * 환경에서 정보를 읽어보고 이 기능을 사용할 수 있는지 여부를 판단할 수 있습니다. * 사용자에게 새 응용 프로그램을 시작할 수 있는 권한이 있습니다. */ 돌아가다 표준::make_filengths< >Hello 어플리케이션>(부러워하다); }); }
「 」를 참조해 주세요.
- 웹 프레임워크 비교
- Java Web 툴킷(JWt), Wt의 네이티브 Java 버전
- 기타 C++ 웹 프레임워크
레퍼런스
- ^ "Wt: Release notes". www.webtoolkit.eu. Retrieved 2022-04-20.
- ^ Dumon, Wim; Deforche, Koen (February 11, 2008). "Wt: A Web Toolkit". Dr. Dobb's Journal. Retrieved January 24, 2017.
- ^ Volkman, Victor (June 6, 2008). "Wt: C++ Web Toolkit Library Lets You Write Scripting-Independent Web Apps". QuinStreet. Retrieved January 24, 2017.