Strutsメモ

出处:(http://muimi.com/j/jakarta/struts/#WhatIsFramework) 

このページはJakarta Strutsの紹介、およびメモです。

もくじ



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

  •  



(2002/8/11)

書籍

 

調査予定

これはstrutsの基本的な仕組みなので、作らないわけにはいかないでしょう。詳細は、参考のページを見ると詳しいです。 JSPのフォームなどから入力した日本語を、正しくエンコーディングするには、アプリケーション側で手を加える必要があります。これは最低限の機能ではないですが、今回作ったアプリケーション(わーどばとらー)では必須機能なので、一応やってみました。それほど手間でもないし。

一番簡単なのはfilterの機能を使い、filter中で、 ServletRequest#setCharcterEncodingすることです。 javax.servlet.Filterインターフェイスを実装したクラスを作り、 doFilterはこんな感じにします。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值