0

サーブレットを使用してJavaEEでオンライン求人システムを開発しています。 「/」を使用してコンテキストパスにユーザー名を追加することにより、各ユーザーに独自のURLを付与したいと思います。

簡単に言えば、URLを/mainから/main / usernameに書き直して、ユーザーがログインしたときにアドレスバーにユーザー名が表示されるようにします(stackoverflowやfacebookの場合と同じように)。

例えば。現在、 JqueryAjaxを使用して"/ main?username =" + username(正常に動作)にリダイレクトしていますが、 / main/usernameにリダイレクトしたいと思います。encodeURLメソッドを試しましたが、「/」はサブディレクトリを検索します。誰かがそれがうまくいくはずだと思うなら、私に構文を教えてください。web.xmlでURLマッピングを実行しました(たとえば、signin.jspはsignin uriにマップされます)

4

2 に答える 2

1

通常、これはサーバーでURL書き換えを使用して実現されます。IISの場合、これはweb.configを作成するか、Apacheで.htaccessファイルを作成することを意味します。サーバーに相当するものを見つける必要があります。そうすれば、ディレクトリ構造タイプ/username/をアプリケーションのHTTPGET変数に解析することができます。

于 2012-11-27T22:28:00.350 に答える
1

myrecruitingsite.com私があなたの質問を理解しているなら、あなたはあなたがユーザーをリダイレクトすることができるようなJavaEEサイトを持ちたいと思うでしょうmyrecruitingsite.com/main/<username>myrecruitingsite.com/main/arg21、またはにリクエストが行われた場合、リクエストmyrecruitingsite.com/main/geoffreywisemanを同じサーブレットに送信し、どのユーザー名がリクエストされたかを知りたいと考えています。

Javaサーブレットマッピングは、多くの最新のWebフレームワークのように、複雑なルーティングパターンを直接サポートしていません。myrecruitingsite.com/main/<username>ユーザープロファイルサーブレットおよびmyrecruitingsite.com/main/<username>/contact連絡先サーブレットにリクエストを送信するようにweb.xmlを設定することはできません。ワイルドカードマッピングを実行できますが、その後のすべてのルーティング決定は、の外部で実行する必要がありますweb.xml

または、ブラウザによって要求されたURLがサーブレットマッピングレイヤーによって解釈される最後のURLにならないように、(通常はサーブレットフィルタを使用して)URL書き換えを行うことができます。これにはフレームワークがありますが、自分で行うこともできます。

基本的に、ワイルドカードを使用してサーブレットマッピングのURLパターン を構成してから、 getPathInfo()をクエリして、残りのワイルドカードを確認する必要があります。それだけでもかなり簡単です。

さまざまなJavaWebフレームワークのいずれかを使用している場合は、ルーティングのための機能と、おそらくすでに必要なことを実行するフロントコントローラーサーブレットがあります。そのシナリオでは、詳細についてフレームワークのドキュメントを確認する必要があります。

一方、サーブレット(またはサーブレット+ jsp)を使用して自分で実行している場合は、単一のサーブレットにワイルドカードマッピングを実行するだけで、機能を追加するとますます大きくなります。おそらく、サーブレットがフロントコントローラーサーブレットとして機能し、ルーティング作業を実行し、後続のすべての作業をプレーンオールドJavaオブジェクト(POJO)に委任する独自のマイクロフレームワークを開発する必要があります。

例として、ルーティングサーブレットは、URLパターン(おそらくJava正規表現で指定されている)と、サーブレットインターフェイスまたは独自の作成の別のインターフェイスを模倣する独自の作成のオブジェクトとの間のマッピングを維持できます。このようにして、web.xmlにバインドされたルーティング決定を担当するサーブレットと、特定の要求の詳細を担当する小さなクラスのネットワークがあります。それは仕事ですが、それはひどく難しいことではありません。

于 2012-11-27T22:33:36.037 に答える