質問

データベースに保存されているいくつかの値のいずれかを表示する単一ページを持つstruts2アプリケーションがあります。アプリケーションは、多くの学部がある学校向けで、各学部には多くのプログラムがあります。部門ページには、次のようなURLを使用してアクセスします

department.action?id=2

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

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

www.myschooldomain.com/department/engineeringのようなURLを印刷して、department.action?id = 2に移動することを希望します

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

しかし質問は:struts2でこれを行うより良い方法はありますか?

ありがとう。

更新(2009年5月):たまたまこの質問に出くわして、解決するために自分がしたことを言うと思いました。

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

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

役に立ちましたか?

解決

これは通常、サーブレットを「/ department」にマッピングし、 path サーブレット内の情報(例: '/ engineering')によりIDを決定します。

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

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

他のヒント

URL書き換えフィルター

を使用できます

これにより、追加のサーブレットまたはJavaコードが不要になりますが、XML記述子が必要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top