通过Struts应用MVC设计模型

Posted by & filed under STRUTS.

模 型–视图–控制器(Model-View-Controller,MVC)体系突出了Servlets和JSP的优点,同时也令它们的缺点最小化。在 实现中,用户请求被发送到一个控制器servlet,该servlet决定请求的性质,并且根据请求的类型传送给适合的处理器。每个处理器都和一个特别的 模型相关,里面封装有商业逻辑来执行一些特别的函数集合。处理完毕后,结果会发送回处理器,处理器选择适合的视图显示它。

Struts最早于2002年5月作为Jakarta项目的组成部分问世,Jakata项目由Apache Foundation.运做。项目的创立者希望该项目的研究改进和提高Java Server Pages (JSPs)、servlet、标签库以及面向对象的技术水准。Struts为使用MVC体系来编写应用提供了一个架构。Struts使用 “ActionMapping”,它允许servlet将用户的请求转变为应用行为。ActionMapping通常指定一个请求的路径、在请求上进行动 作的对象类型,以及指定其它需要的属性。

Action对象作为ActionMapping的一个部分使用,负责处理请求,并且发送响应回适合的视图(通常是一个Web浏览器),或者传送请求至适合的模型。

在模型和视图间的桥是一个form bean,它可以通过继承org.apache.struts.action.ActionForm得到。form bean用来保存处理前的用户数据,或者显示返回给用户的模型数据。Struts包含有自定义的标签,它可以由创建的form bean中自动组合字段。

在实践中用户请求JSP页面,控制器servlet接收请求并决定由哪个应用处理它。Action对象传送该请求到包含有接收商业逻辑的 JavaBean中。商业逻辑bean将连接数据库并进行查询,接收结果,然后返回结果给Action对象。Action对象将结果作为请求的一部分存放 到一个form bean中。一旦收集完请求的全部数据,就可以格式化结果并且显示。最后是JavaServer Page以HTML表格的形式将结果显示出来。

Strutsのトラブルシューティングメモ

Posted by & filed under STRUTS.

uebu: Strutsのトラブルシューティングメモ:
ここに書いてある原因と解決策はあくまで私がやったミスとその解決策であり、 その現象に対する原因や解決策がすべて書いてあるというわけではありませんのでご注意下さい!

  • フォワード先が空白になる
    ・mapping.findForward()で指定したフォワード名がstruts-config.xmlのActionの定義に書かれていない。
    ・Actionがexecuteメソッドをオーバーライドしていない。 またはメソッド名が間違っているため、正しくオーバーライドできていない。
    ・Actionのexecuteメソッドのシグネチャが異なるため、正しくオーバーライドできていない。
  • JSP文書にアクセスするとJavaScriptエラー
    ・html:formタグのfocus属性に書かれた名前の入力欄(プロパティ)が存在しない。
  • サーブレット action が利用できません
    ・struts-config.xmlの構文エラー、 またはcontrollerタグやpluginタグに記述したクラスがロードできないなどの理由で、 ActionServletの初期化に失敗している。 →サーブレットコンテナのログを見て、エラー原因を解消します。
  • パス /****** に対するリクエストは無効です
    ・html:formのaction属性(など)として指定したパスが、struts-config.xmlに定義されていない。
  • javax.servlet.ServletException: Exception creating bean of class …: {1}
    ・struts-config.xmlのform-beanに書いたクラスが存在しない。
    ・struts-config.xmlのform-beanに書いたクラスがActionFormを継承していない。
    ・struts-config.xmlのform-beanに書いたクラスがインスタンス化できない (例:抽象クラス、引数のないpublicのコンストラクタがない)
    ・struts-config.xmlのform-beanに記述するDynaActionFormなどのクラス階層が間違っている。 org.apache.struts.action.とorg.apache.struts.validator.に特に注意。
    ・DynaActionFormのつもりで間違ってActionFormと書いている。 ActionFormは抽象クラスなのでインスタンス化できません。
  • html:formの入力内容が自作Form

struct and MVC

Posted by & filed under STRUTS.

MVC–Struct:
モデル(Model:ビジネスロジック–JavaBeans–Javaのクラスで実装しても、EJBを用いて実装してもよい)
ビュー(View:プレゼンテーション–JSP)
コントローラ(Controller:モデルとビューを制御–サーブレット)
model2����

STRUCTSの基本動作
まず、ブラウザからHTTPリクエストが送られます。すると、コントローラであるSTRUTSのアクションサーブレット(STRUTS提供)は、指定のモジュールのリクエストプロセッサ(STRUTS提供するリクエスト処理を制御するクラス)へHTTPリクエストを転送します。リクエストプロセッサは、HTTPリクエスト中にフォーム情報がある場合、その情報を保持するためのアクションフォームBean(利用者が作成)にセットします。
リクエストとアクションフォームBeanの対応は、モジュール設定ファイル(structs-config.xml)に記述されています。すなわち、HTTPリクエスト内の入力フォームの情報を、Structsが自動的にBeanにセットします。
次に、HTTPリクエストのURLに対応したアクション(ビジネスロジックを呼び出すためのクラスで、利用者が作成する)を呼び出します。呼び出されたアクションでは、ビジネスロジックを実行します。次に、ビジネスロジックの結果などを表示するための情報をJavaBeansやActionFormBeanクラスにセットし、JSPからアクセス可能なコンテキスト保持させます。続いて、次にHTTPリクエストの処理を行うリソース(JSPページやアクションなど)の情報をActionForwardクラス(Strutsが提供)としてリクエストプロセッサに返却します。その後、アクションから返却されたActionForwardクラスが示すリソース(JSPページなど)を呼び出します。呼び出されたJSP内では、表示のために必要な情報をStrutsが提供するカスタムタグライブラリなどでコンテキストから取り出し、ページを作成します。
最後に、JSPによって作成されたページをHTTPレスポンスとして返却します。…