0

皆さん、こんにちは。助けてくれてありがとう。私のさびた英語で失礼します :)。spring 3.x 、 spring-security 、および .jsp ページで mvc Web サイトを作成しようとしていました。ここに多くのコードを貼り付けることができますが、URI の方法に関する一種の論理問題であるため、役に立たないと思いますアクションとコントローラーの uri の動作:

1) JSP ページ: login: すべてのゲストが利用可能で、アクション "home" または homeUser を持つ管理者用の homeAdmin :
アクションを持つユーザー用「 user/action 」でマッピングされたさまざまなアクション UserLIst: すべてのユーザーとその情報をテーブルに一覧表示するページ



2)コントローラー:ゲストコントローラー:クラスコントローラーなし、2つの方法しかありません。最初は value={ "/, home"} をマッピングし、後者は "login" をマッピングします。そのため、リクエストを実行しようとする人は全員、ログインできるようにログイン ページにリダイレクトされます。

@Controller
   public class LoginController {

   @RequestMapping(value={"/home","/"}
   (code)//if admin homeAdmin else homeUser
   return new ModelAndView("home");

   @RequestMapping(value="/login", method = RequestMethod.GET)
   (code)
   return new ModelAndView("login");
....

Uri アクションの最初の部分をマップするための値 "/admin/" を持つクラスのリクエスト マッピングがあります。また、リスト ユーザーなどの指定されたアクションのリクエスト マッピングにはさまざまなメソッドがあります。管理者コントローラ

@controller
@RequestMapping("/admin")
public class AdminController {

@RequestMapping(value={"/list", "/adminFilm"})
(code)
return new ModelAndView("adminFilm");
...

今、私は管理者としてログインし、私の URL は URL に
"localhost:8080/name_project/homeAdmin.jsp"
対応する URI になりました
"/webapp/metainf/views/homeAdmin.jsp"
(メソッド InternalResuorceViewResolver によってその xml ページに生成されます)。
「List User」ボタンを押すと、action="admin/list" が実行されます。現在、私の URI は次のとおりです
"localhost:8080/name_project/admin/listUser.jsp"
。この時点で、私のアクションは「admin/」を生成する必要はありません。 (j_springsecurity_Logout) 上部の URL が から
"localhost:8080/name_project/admin/listUser"になっ

"localhost:8080/name_project/admin/j_spring_Logout"
ので、(当然のことながら) マッピングが見つからないというエラーが発生します。
ホームページ リクエストは、AdminController ではなく LoginController によってマップされるため、同じ問題が発生します。そのため、パス「/admin/home」を持つページからリクエストすると、これが見つからず、loginController でコントローラーを呼び出すことができません。jspページのパスを強制することで解決できましたが、プログラミングが不適切です(エラーが発生します)。このパスの問題をどのように解決できますか?

問題が理解できない場合は、書き直します。

ありがとう。

4

1 に答える 1

0

私が理解しているように、ブラウザのアドレスバーの現在の URL はlocalhost:8080/name_project/admin/listUser. ここで、URL を持つリンク (またはボタンは関係ありません) をクリックしますj_springsecurity_Logout。これは現在のパスに対して相対的であるため、期待どおりの動作が得られます。解決された URL はlocalhost:8080/name_project/admin/j_spring_Logoutです。

必要なのは、リンクの URL がアプリケーション パスに対して相対的であることです。それ<c:url />がそのためです。したがって、リンクの場合、代わりに

<a href="j_spring_Logout">

あなたが書く

<a href="<c:url value="j_spring_Logout" />">
于 2013-07-02T18:17:19.693 に答える