出处:(http://muimi.com/j/jakarta/struts/#WhatIsFramework)
このページはJakarta Strutsの紹介、およびメモです。
もくじ
- Strutsって?
- フレームワークって?
- MVC モデル2
- シンプルStruts
- Applicationリソースファイル
- ActionFormとAction
- 入力の日本語化
- 調査予定
- 参考
- データソースの利用
- リソースの日本語化
- admin機能の使い方
- Strutsのタグの利用1
- .doの変更
- htmlタグでのリンク
- フォーム内でネストしたクラス
- コンボボックス
- ファイルアップロード
- Formに初期値を入れる
- ログを管理する
- プロパティーについて
- Strutsユーティリティクラスを使う
- Struts Testcase
- 2度押し防止(同期トークン)
- Action#execute()
- Validator
- DynaActionForm
- Plugin
- NestedTag
- Action、validateのスイッチ
- ActionMessage
- Ant
- Actionを拡張する
- ActionFormを拡張する
- RequestProcessorを拡張する
- Strutsカスタムタグを拡張する
- 日本語に関する問題
- struts-config.xmlの分割1(DTD)
- struts-config.xmlの分割2(サブアプリケーション)
Struts(ストラッツ)はWebアプリケーションを開発するためのフレームワークです。
Strutsは英語(?)で、支柱という意味で、家や橋を支える土台となるものです。基本となる部分を裏方で支え、アプリケーションの開発者が簡単にアプリケーションを開発できるようにします。 フレームワークというのは、枠組みです。開発効率やプロダクトの品質を上げるために使われます。
旅行に例えるなら、パック旅行のようなものです。行き帰りの飛行機や、宿泊先、誰もがおとづれるような、メジャー観光地への訪問は先に用意されています。パック旅行を利用する人は、旅券やホテルの手配などの手間を省き、単純に旅行を楽しむという目的に専念できます。はじめての海外旅行でも、失敗せずに、旅行を楽しむことができます。もちろん、パック旅行を選択することで、自分ができることの自由は幾分減ってしまいますが。あと、どのパック旅行の選択も重要です。自然を楽しみたいのに、大都会へ行っても仕方ないですしね。
ソフトウェアの世界でのフレームワークもそんな感じです。 Webアプリケーション開発時に、押さえておかなければいけない、セキュリティーや保守性の問題をフレームワークをもとに作成することで、解決できます。パック旅行と違うのは、申し込めばOKというものではなく、フレームワークの使い方を習得するまでが、けっこう大変というところです。 MVCモデルは、現在Webアプリケーションを作成する上で、もっとも一般的な考え方です。ブラウザからのリクエスト~レスポンスまでを、 Model、View、Controllと役割を分けることで、作業分担を可能にし、保守性を向上させます。
モデル2というのは、MVCモデルを発展させたもので、リクエストを受けるController(通常サーブレット)を1箇所にまとめることで、共通ロジックを集中させます。現存するフレームワークはたいてい、このモデル2を採用しています(たぶん)。
と思ったんだけど、単にMVCをWebに適用したのが2かも。
dW : Java technology : Struts、オープン・ソースMVC実装 というわけで、ストラッツです。 Strutsは、機能がシンプルで習得しやすいと言われていますが、意外と難しい気がします。それはきっと、基本的なActionFormやActionの他に、カスタムタグやらリソースやらが絡んできて、単純にハローワールドするだけでも、あれこれ準備が必要、というのが手間なんでしょう。
今回は、最低限実行に必要な部分に絞って、実装してみました。アプリケーションは昔Perlで作った、わーどばとらーを、 Javaにして、Struts上で作ってみました。
一応アーカイブは wb-0.1.zipです。 warのディレクトリ構造になっていますが、重くなるので、libの中身は省きました。動作のためにはstruts-blankなどからjarをコピーする必要があります。 Strutsのバージョンは1.1-b1を使いました。現状、新機能は使っていませんが、Validationとかはやってみたいので。
struts-bean.tldやstruts-logic.tldさえ使っていません。 struts-htmlのみ使っています。密接にstrutsに関わっていないタグライブラリは今後、JSTLで実装を追加していきたいと思います。
以下、作成中につまずいたところについて、簡単に書きます。 これは、なくても動くかと思ったんですが、 struts.configで指定しないと起動時エラーになるし、入力エラーを返すActionErrorの引数で必要なようなので、しぶしぶ使いました。
リソースファイル(ex.ApplicationResources.properties) を作って、クラスパス以下に置きます。ソースパスにおいといて、コンパイル時にクラスパスにコピーするようにするとよいでしょう。でもって、struts.configの下の方の記述を自分が置いた場所に書き換えます。
Strutsって?
フレームワークって?
MVC モデル2
シンプルStruts
Applicationリソースファイル
<message-resources parameter="wb.ApplicationResources"/>
私は、エラーメッセージだけ書きました。
error.name.required=name is required.<br> error.word.required=word is required.<br> error.word.duplicated=word is allready used.<br>
ちゃんと作る場合は、表示するメッセージを全部ここに書いとくと、あとでローカライズする(他言語に置き換える)ときに便利です。
エラーメッセージを表示するには、表示する場所に以下のような記述をします。
<html:errors/>
errosについての補足
<html:errors/>を使う場合には、リソースファイルからヘッダ(errors.footer)とフッダ(errors.header) が読み込まれるので、この値もリソースファイルに定義しましょう( でないと、null nullが表示されます)。
エラー一覧でなく、個々のエラーを場所を指定して、出力したい場合は、 property属性を使います。 <html:errors property="username"/>
このあたりのことはDeveloper GuidesのHTML Tagsに書いてます。
ActionFormとAction
入力の日本語化
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { req.setCharacterEncoding(enc); chain.doFilter(req, res); }
でもって、web.xmlにfilterを登録します。
<filter> <filter-name>encodingFilter</filter-name> <filter-class>wb.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>Shift_JIS</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <servlet-name>action</servlet-name> </filter-mapping>
ちなみに、struts-sampleやstruts-blankをコピーして、作ってた場合、web.xmlのDDがサーブレットがAPI2.2用になってるので、これは2.3用に変更する必要があります。このへんはstruts云々でなく、web.xmlの設定の問題ですが。
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
filter機能の詳細については、 dW JavaTechnology Tomcatにおけるフィルタリング機能の活用 を見るといいかも。
API2.2で作らないといけないような場合は、 ActionServletを継承したサーブレットをつくり、 HttpServletRequestのラッパーを作るのが、一番簡単かなという気がします。たぶん。
次のページへ
データソースの利用Validator:クライアントサイドの入力チェック入力の日本語化(setCharcterEncoding/Requestのラッパー)リソースの日本語化- CSS対策の仕組み
- 2度押し防止(同期トークンの仕組み)
- admin機能の使い方
- Actionとセッション、リクエストは切り離したくないですか?
- こんなにタグライブラリばりばりで、デザインとプログラムは分業できるんですか (デザイナーが簡単に使えるのか?)
- よくやるんだけど、リソースを文字列で指定するのって、間違いやすくない?
- Camino
参考
- Jakrataプロジェクト徹底攻略 Struts完全入門
- WEB+DB Press vol.9 Strutsを使ったWebアプリケーション開発
- Java Press vol.23 Struts導入の手引き
- Java World 2002.2 フレームワークを理解する
WEB
- 日本語ML@freeml
- Strust翻訳@Ja-Jakarta
- Strutsカタログ翻訳(設計指針みたいなの)
- 入門Strutsリンク集
(2002/8/11)
調査予定
これはstrutsの基本的な仕組みなので、作らないわけにはいかないでしょう。詳細は、参考のページを見ると詳しいです。 JSPのフォームなどから入力した日本語を、正しくエンコーディングするには、アプリケーション側で手を加える必要があります。これは最低限の機能ではないですが、今回作ったアプリケーション(わーどばとらー)では必須機能なので、一応やってみました。それほど手間でもないし。一番簡単なのはfilterの機能を使い、filter中で、 ServletRequest#setCharcterEncodingすることです。 javax.servlet.Filterインターフェイスを実装したクラスを作り、 doFilterはこんな感じにします。