最初の記事「Jakarta Struts の紹介」では、Struts フレームワークを大まかに分析し、Struts で実現できる機能について説明し、また Struts を構成するさまざまなコンポーネントを参照しました。 2 番目の記事「Jakarta Struts の学習」では、Struts を使用して単純なアプリケーションを構築する方法のプロセス ステップを詳細に説明し始めました。この記事では、applicationResource ファイル内のテキスト情報を Struts タグを使用して JSP ページに表示する方法を説明します。
Action クラスは、Struts アーキテクチャとアプリケーション内のビジネス ロジック コードを接続するブリッジです。したがって、実際のアプリケーションのロジック処理は別のロジック層で完了する必要があるため、Action クラスをできるだけ小さく単純にする必要があります。 n 層アプリケーションを開発している場合は、層間のインターフェイスをできるだけシンプルにする必要があります。実際、Action クラスのメイン メソッド「perform()」(1.1 では excute()) は、このメソッドで何かを行う必要があることをある程度暗示しています。各 Action クラスは org.apache.struts.action.Action から継続する必要があることがわかっています。小規模なアプリケーションでは、おそらく org.apache.struts.action.Action を継続するのに十分な Action クラスを実装したいくつかの共通機能から要約しました。したがって、私の意見では、これらの共通機能のコードを実装する基本クラスを構築して、アプリケーションで使用されるすべての Action クラスが org.apache.struts.action.Action を直接継続するのではなく、これを継続していくつかの共通機能を完成させる必要があります。コードの再利用を実現する基本クラスは、非常に優れた設計です。このメソッドを StrutsSample に適用し、このような基本クラスを構築しました。この基本クラスのメソッドは、複雑なロジックを完成させ、単純にリクエストを転送するアクション クラスで使用できます。
package com.oreilly.actions;
import java.io.IOException;
import java.util.PROperties;
import java.util.ResourceBundle;
import java.util.MissingResourceException;
import java.util.Enumeration;
import java.util.Properties;
import java.rmi.RemoteException;
import javax.ejb.EJBHome;
import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org. apache.struts.action.ActionServlet;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
このクラスを使用しますStruts を開発する場合、すべての Action クラスは基本クラスを継承する必要があります。実際のアプリケーションで使用される可能性が最も高いもののいくつかが考慮されています。この記事に関する限り、Struts と密接に関係のないクラス内の一部のメソッドはコメントのみで完全には実装されていません。興味があれば、これらのメソッドを完成させてこのクラスを適用してください。実際のプロジェクトでの開発がスピードアップします。すべての Action クラスは org.apache.struts.action.Action を継承するため、クラスは同じであることに注意してください。
public abstract class AbstStrutsActionBase extends Action {
/ * struts-config.xmlに記録されているものを定義します
* グローバルアプリケーションで汎用的に使用できる転送フラグ */
protected staticfinal String SUCCESS = "success";
protected staticfinal String FAILURE = "失敗";
protected static Final String ERROR = "error";
protected static Final String LOGIN = "login";
protected static Final String CONFIRM = "confirm";
protected Context jndiContext = null;
/* *
※デフォルトの構築方法
*/
public AbstStrutsActionBase() {
}
/**
次の EJB インスタンスを検索する方法は完全には実装されません。
一般に、Action クラスは、アプリケーションのビジネス ロジックを実装する EJB セッション Bean (または単なる通常の JavaBean) を呼び出す必要があります。大規模なプロジェクトでは、開発者はレイヤー間に明確な境界を引く必要があります。 Action クラスでは、JNDI 情報を含む環境のインスタンスを取得し、EJB の JNDI 名を通じてクエリを実行してそのホーム インターフェイスを取得する必要があります。このプロセスは単純ではないため、以下のコード スニペットは必要な実装を示す小さな例にすぎません。
パラメータの型 String、クエリ対象のJNDIの名前が渡されます
戻り値の型 Object、つまり、見つかったホームインターフェイスです
検索に失敗した場合は、NamingException例外がスローされます
リソース情報が失敗した場合取得しようとすると、MissingResourceException 例外がスローされます
*/
public Object lookup(String jndiName)
throws NamingException, MissingResourceException {
// 调用EJB对オブジェクト、通过構築记录JNDI情報のPropertiesオブジェクト
// 初期環境情報
を取得する if (jndiContext == null) {
ResourceBundle resource =
ResourceBundle.getBundle( "strutssample.properties");
プロパティproperty = new Properties();
properties.setProperty(
Context.INITIAL_CONTEXT_FACTORY,
resource.getString(Context.INITIAL_CONTEXT_FACTORY));
properties.setProperty(
Context.PROVIDER) _URL,
resource.getString(Context.PROVIDER_URL));
properties.setProperty(
Context.SECURITY_PRINCipAL,
resource.getString(Context.SECURITY_PRINCIPAL));
properties.setProperty(
Context.SECURITY_CREDENTIALS,
resource.getString (Context.SECURITY_CREDENTIALS));
jndiContext = new InitialContext(properties);
}
注釈:真の製品では、この時点でコードの健全性を考慮し、コードを try/catch ブロック内に追加し、すべてのコードや重要な情報をシステム ログに記録します。
return (jndiContext.lookup(jndiName));
}
ActionクラスはStrutsによって使用されるため。所謂この例では、これは抽象的な方法であり、継続する各サブクラスによって具体的に実行されるか、ログ情報など、実行されるすべてのアクションの共通メカニズムが実行されます。
パラメータマッピング:そのタイプはActionMappingであり、このアクションでスキップ選択を使用します
パラメータactionForm:今回のHTTPリクエストデータの充填が完了したStrutsによるActionFormオブジェクト(リクエストデータが存在する場合など)
パラメータrequest:このActionすべての処理の今回のHTTP要求(对象)
パラメータresponse:このAction出力データ要求に必要なHTTP响应(对オブジェクト)
I/Oがある場合、本メソッドはIOExceptionを出力します常
処理時にサーブレットが発生する常、本メソッドがServletExceptionを出力する常
本メソッド処理完了要求後按照処理処理逻辑が対応する面の方向(オブジェクト)を返す
パブリック抽象ActionFor Ward Perform(
ActionMappingマッピング,
ActionFormフォーム、
HttpServletRequest リクエスト、
HttpServletResponse レスポンス)
throws IOException、
}
あるいは、その抽象メソッドより便利な点、那就在里面干点何么吧、比如像下在其中记录ログ。
{
ActionForward forward = null;
// ただ単にサーブレットログへの警告情報
getServlet().log(
"AbstStrutsActionBase.perform() [アクションクラス: "
+ this.getClass().getName()
+ " ]");
getServlet().log(
"AbstStrutsActionBase.perform() [フォームクラス : "
+ (form == null ? "null" : form.getClass().getName())
+ " ]");
}
その後、我们再编写的每个Action类都应该从AbstStrutsActionBase继续,并依照处処理逻辑编それぞれの演奏方法を書き写す
package com.oreilly.actions;
import java.io.IOException;
import java.rmi.RemoteException;
import javax.ejb.Cre食べた例外;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionError;
import org.apache.struts.action. ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import com.oreilly.forms.LoginForm;
/*
LoginAction の演示アクションは Struts 構造によってどのように制御されますか
この例では、私だけが简单の演示メソッドはどのように実行され、返されます
*/
public class LoginAction extends AbstStrutsA ctionBase {
次に、ユーザーを認証する方法です。この例では具体的な実装はありません。ただし、一般的なアプリケーションのソリューションは、JavaBean または EJB を呼び出して完了します。 EJB (基本クラスで完了) を見つけるために使用される検索メソッドは、このメソッドで呼び出す必要があります。このメソッドは、バックエンド データベースに対してユーザーを認証するためのインターフェイスを返します。
パラメータの型 String、検証するユーザー名
以上がJakarta Struts 1.1の学習内容(3)です その他の関連記事はPHP中国語サイト(www.php.cn)にご注目ください!