0

データベースに格納されている多数の値の 1 つを表示する単一ページを持つ struts2 アプリケーションがあります。多くの学科があり、各学科には多くのプログラムがある学校への申請です。部門ページには、このような URL を使用してアクセスします

department.action?id=2

DepartmentAction は、表示のために id = 2 の Department をロードします。ユーザーがサイトをブラウジングするだけであれば、これで問題ありませんが、新聞でエンジニアリング部門と言うリンクを提供したい場合は不快になります。リンクは www.myschooldomain.com/department.action?id=2 である必要があります。これには多くの問題があります。

まず、ユーザーフレンドリーではありません。第 2 に、部門が動的に維持され、部門の ID が警告なしに変更され、リンクが不安定になる可能性があるため、破損しやすくなります。

www.myschooldomain.com/department/engineering のような URL を印刷して、何らかの方法で department.action?id=2 に移動させたいと思います。

これまでの私の考え: 最後に部門名の URL を解析し、名前で検索するアクションを作成します。おそらく、各部門のデータベースに Friendlyurl フィールドを追加できます。

しかし問題は、struts2 でこれを行うためのより良い方法はありますか?

ありがとう。

更新 (2009 年 5 月):私はたまたまこの質問に出くわし、それを解決するために何をしたかを言おうと思いました。

私は、struts.xml に departments という新しいパッケージを作成しました。このパッケージには、* にマップされたアクションが 1 つだけあります。したがって、mydomain.com/departments/anything.html へのすべてのリクエストをキャッチします。

アクション クラスでは、単に URL を解析し、departments/ と .html の間の部分を探します。これが部門の名前なので、データベースで検索できます。これは、ほぼ 5 か月間正常に機能しており、サイトの他の領域にも実装しました。

4

2 に答える 2

3

URL書き換えフィルターを使用できます

これにより、サーブレットや Java コードを追加する必要がなくなりますが、XML 記述子が必要になります。

于 2009-04-08T12:53:53.230 に答える
1

これは通常、サーブレットを「/ department」にマッピングし、サーブレット内のパス情報(たとえば、「/engineering」)を使用してIDを決定することによって行われます。

Struts2ディスパッチャはこの動作を実装していないため、独自のサーブレットを作成するのが最も簡単な場合があります。このサーブレットは、有効な「フレンドリ」名から非フレンドリーな数値識別子へのマップを使用して構成されます。これは実際のMap場合もあれば、データベースファインダーメソッドを使用して実行する場合もあります。

の結果はgetPathInfo()IDの検索に使用され、リクエストはdepartment.actionに転送されます。ケースも処理しnullます。これは、ユーザーが/departments/ディレクトリを参照しようとしていることを意味します。

于 2008-10-22T17:47:55.717 に答える