| 原作者 | エムウェブ |
|---|---|
| 初回リリース | 1.0.0 / 2005年12月 |
| 安定版リリース | 4.10.4 / 2024年3月6日[1] |
| リポジトリ | Wtリポジトリ |
| 書かれた | C++ |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | ウェブフレームワーク |
| ライセンス | デュアルライセンス:
|
| Webサイト | ウェブツールキット |
Wt (発音は「ウィッティ」 ) は、C++ プログラミング言語用のオープンソースのウィジェット中心の Web フレームワークです。Qtフレームワークに 似たAPIを持ち(ただし Boost で開発されているため、Qt と混在させると互換性がありません)、ウィジェット ツリーとイベント駆動型のシグナル/スロット システムも使用します。[2]
Wtの設計目標は、従来のMVC (モデル・ビュー・コントローラ)設計パターンではなく、デスクトップアプリケーションAPIで使用されるステートフル コンポーネントモデルをWeb開発に適用することです。そのため、MVCをWebページレベルで使用するのではなく、個々のコンポーネントレベルに押し上げます。[3]
ライブラリはデスクトップソフトウェア開発プロセスを使用しますが、次のようなWeb固有の機能もサポートしています。
- セマンティック URL
- ブラウザの履歴のナビゲーション
Wt のユニークな機能の 1 つは、ブラウザレンダリングモデルの抽象化レイヤーです。このライブラリは、互換性のあるブラウザとの通信に Ajax を使用し、他のユーザー エージェントにはプレーン HTML フォーム ポストバックを使用します。プログレッシブブートストラップメソッドを使用して、ユーザーインターフェイスは最初にプレーン HTMLドキュメントとしてレンダリングされ、その後、ブラウザでサポートされている場合は、対話性を高めるためにAjax を使用するように自動的にアップグレードされます。このように、Wt は定義上次のようになります。
- プログレッシブエンハンスメント戦略を自動的に実装する唯一のサーバー側フレームワーク。
- 検索エンジン最適化(SEO) 品質を備えた唯一の Ajax フレームワーク。
組み込みシステム環境ではC /C++が普及しているため、そのようなデバイスでは Wt がよく使用され、その結果、パフォーマンスが高度に最適化されています。
主な特徴
- 自動的なグレースフルデグラデーションとプログレッシブエンハンスメント
- サーバー開始イベントをサポート ( Comet )
- 統一されたレンダリングAPI ( SVG、HTML5キャンバス要素、VML )
- クライアント側とサーバー側の検証
- クロスサイトスクリプティングやクロスサイトリクエストフォージェリ(CSRF)の脆弱性を回避するためのさまざまなセキュリティ機能が含まれています。
- コンパクトな C++ ORMレイヤー ("Wt::Dbo")が含まれています
- 利用可能な場合は、 WebSocketネットワーク プロトコルを使用してクライアント サーバー モデルの通信を行い、Ajax またはプレーンなWeb ページレンダリングにフォールバックします。
より詳細な概要については、公式 Web サイトの「機能」セクションを参照してください。
コード例
Wt の 「Hello, World!」プログラム:
#include <Wt/WApplication.h> #include <Wt/WBreak.h> #include <Wt/WContainerWidget.h> #include <Wt/WLineEdit.h> #include <Wt/WPushButton.h> #include <Wt/WText.h>
/*
* イベントに反応し、入力を読み取り、フィードバックを返す方法を示すシンプルな Hello World アプリケーション クラス。
*/ class HelloApplication : public Wt :: WApplication { public : HelloApplication ( const Wt :: WEnvironment & env );
プライベート:
Wt :: WLineEdit * nameEdit_ ; Wt :: WText * greeting_ ;
void挨拶(); };
/*
* env 引数には、新しいセッションと
最初のリクエストに関する情報が含まれます。これは WApplication コンストラクターに渡される必要があるため、通常はカスタム
アプリケーション コンストラクターの引数にもなります。
*/ HelloApplication :: HelloApplication ( const Wt :: WEnvironment & env ) : WApplication ( env ) { setTitle ( "Hello world" ); // アプリケーション タイトル
root () -> addNew < Wt :: WText > ( "お名前をお願いします ? " ); // テキストを表示
nameEdit_ = root () -> addNew < Wt :: WLineEdit > (); // テキスト入力を許可するnameEdit_ -> setFocus (); // フォーカスを与える
auto button = root () -> addNew < Wt :: WPushButton > ( "Greet me." ); // ボタンを作成しますbutton -> setMargin ( 5 , Wt :: Side :: Left ); // 5 ピクセルの余白を追加します
root () -> addNew < Wt :: WBreak > (); // 改行を挿入greeting_ = root () -> addNew < Wt :: WText > (); // 空のテキスト
/*
* スロットを使用してシグナルを接続
*
* - シンプルな Wt 方式: オブジェクトとメソッドを指定します
*/
button -> clicked (). connect ( this , & HelloApplication :: greeting );
/*
* - 任意の関数オブジェクトを使用します。たとえば、std::bind() を使用して、結果のメソッド呼び出しに値をバインドすると便利です
* /
nameEdit_
- > enterPressed (). connect ( std :: bind ( & HelloApplication :: greeting , this ));
/*
* - ラムダを使用:
*/
button -> clicked (). connect ([ = ]() { std :: cerr << "Hello there, " << nameEdit_ -> text () << " \n " ; }); }
void HelloApplication :: greeting () { /* * nameEdit_ フィールドに入力されたテキストを使用してテキストを更新します。 */ greeting_ -> setText ( "Hello there, " + nameEdit_ -> text ()); }
int main ( int argc , char ** argv ) { /* * main メソッドは共有リソースを設定する場合がありますが、その後、 要求のリッスンを開始し、アプリケーションのライフ サイクル全体を処理する サーバー アプリケーション (FastCGI または httpd) を起動する必要があります。 * * WRun の最後の引数は、 新しいアプリケーション オブジェクトをインスタンス化する関数を指定します。 この関数は、新しいユーザーが Wt アプリケーションにアクセスし、ライブラリがブラウザー サポートをネゴシエートした後に実行されます。 この関数は、新しくインスタンス化されたアプリケーション オブジェクトを返す必要があります。 */ return Wt :: WRun ( argc , argv , []( const Wt :: WEnvironment & env ) { /* * 環境から情報を読み取って、 ユーザーが新しいアプリケーションを起動する権限を持っているかどうかを判断できます。 */ return std :: make_unique < HelloApplication > ( env ); }); }
参照
参考文献
- ^ 「Wt: リリースノート」www.webtoolkit.eu . 2024年7月10日閲覧。
- ^ Dumon, Wim; Deforche, Koen (2008 年 2 月 11 日)。「Wt: Web Toolkit」。Dr . Dobb's Journal。2017年1 月 24 日閲覧。
- ^ Volkman, Victor (2008 年 6 月 6 日)。「Wt: C++ Web Toolkit Library を使用すると、スクリプトに依存しない Web アプリを作成できます」。QuinStreet。2017年1月 24 日閲覧。
外部リンク
公式サイト
