Echo Web Frameworkとは
「Echo Web Framework」
Javaコードによるアプリケーション開発では、
一方、
Javaのみ、
JavaコードによるWebアプリケーションの作成
本稿執筆時点では、
Echoのサーバサイド・
package jp.gihyo.toolbox.echo;
import nextapp.echo.app.*;
public class HelloEcho extends ApplicationInstance {
@Override
public Window init() {
Window window = new Window();
window.setTitle("Echo Framworkのサンプル");
// ContentPaneの作成
ContentPane contentPane = new ContentPane();
contentPane.setInsets(new Insets(new Extent(20)));
window.setContent(contentPane);
// フォントを指定してラベルを配置
Label label = new Label("Hello, Echo3!");
Font font = new Font(Font.SANS_SERIF, Font.PLAIN, new Extent(36));
label.setFont(font);
contentPane.add(label);
return window;
}
}
Insetsはコンポーネントの周り
前述のように、
package jp.gihyo.toolbox.echo;
import javax.servlet.annotation.WebServlet;
import nextapp.echo.app.ApplicationInstance;
import nextapp.echo.webcontainer.WebContainerServlet;
@WebServlet("/hello")
public class HelloEchoServlet extends WebContainerServlet {
@Override
public ApplicationInstance newApplicationInstance() {
return new HelloEcho();
}
}
ここでは、
![図1 EchoのJava APIで作成したWebページの例 図1 EchoのJava APIで作成したWebページの例](/assets/images/dev/serial/01/engineer_toolbox/0011/thumb/TH800_001.png)
入力フォームを利用する
続いてテキストフィールドやボタンなどによる入力フォームを利用してみましょう。テキストフィールドはTextFieldクラス、
以下に、
package jp.gihyo.toolbox.echo;
import nextapp.echo.app.*;
import nextapp.echo.app.event.*;
public class TextInput extends ApplicationInstance {
private TextField field = null;
private Label messageLabel = null;
@Override
public Window init() {
Window window = new Window();
window.setTitle("Echo Framworkのサンプル");
// ContentPaneを作成
ContentPane contentPane = new ContentPane();
contentPane.setInsets(new Insets(new Extent(20)));
window.setContent(contentPane);
// Columnレイアウトコンポーネントを作成
Column column = new Column();
contentPane.add(column);
// テキストフィールドを配置
Label fieldLabel = new Label("メッセージを入力してください:");
column.add(fieldLabel);
this.field = new TextField();
this.field.setWidth(new Extent(200));
column.add(this.field);
// ボタンを配置
Button button = new Button("入力");
button.setWidth(new Extent(50));
button.setBorder(new Border(new Extent(2), Color.BLACK, Border.STYLE_DOUBLE));
button.setBackground(Color.LIGHTGRAY);
InputListener buttonListener = new InputListener();
button.addActionListener(buttonListener);
column.add(button);
// フォントを指定してラベルを配置
this.messageLabel = new Label("『』");
Font font = new Font(Font.SANS_SERIF, Font.PLAIN, new Extent(24));
this.messageLabel.setFont(font);
column.add(this.messageLabel);
return window;
}
/* ボタンのクリックイベントを受け取るリスナ */
class InputListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String message = field.getText();
messageLabel.setText("『" + message + "』");
}
}
}
Columnはコンポーネントを縦に配置するようなコンテナクラスです。Echoには汎用のレイアウトマネージャのような仕組みはなく、
Columnの他にはRowやGridといったコンテナがあります。Buttonにはボーダーや背景色などを指定しています。Echoに用意されたコンポーネントのデフォルトの見た目はあまり洗練されていないため、
TextInputを起動するためのServletクラスは次のようになります。
package jp.gihyo.toolbox.echo;
import javax.servlet.annotation.WebServlet;
import nextapp.echo.app.ApplicationInstance;
import nextapp.echo.webcontainer.WebContainerServlet;
@WebServlet("/textinput")
public class TextInputServlet extends WebContainerServlet {
@Override
public ApplicationInstance newApplicationInstance() {
return new TextInput();
}
}
Webブラウザからアクセスすると、
![図2 テキストフィールドとボタンを利用したアプリケーションの例 図2 テキストフィールドとボタンを利用したアプリケーションの例](/assets/images/dev/serial/01/engineer_toolbox/0010/thumb/TH800_002.png)
![図2 入力した内容がページに反映される 図2 入力した内容がページに反映される](/assets/images/dev/serial/01/engineer_toolbox/0010/thumb/TH800_003.png)
次回は、