1

単純な Web サーブレットを作成しようとすると、この問題に遭遇します。/../ を含む名前を使用すると、リソースが見つかりません。

これは私が持っているものです。

コントローラー.java

@WebServlet(urlPatterns = {"/Controller"})
public class Controller extends HttpServlet{ ... }

そしてJSPページ:

<form action="Controller">
...
</form>

ただし、より構造化された作業を行うために、名前をフォルダーとして指定しようとしています。これは私が苦労しているコードであり、動作しません:

@WebServlet(urlPatterns = {"/servletController/Controller"})
public class Controller extends HttpServlet{ ... }

JSP ページ:

<form action="/servletController/Controller">
...
</form>

そして、私は多くのバリエーションを試しました。私の質問は、urlPatters-annotation でフォルダー構造を適切に使用する方法ですか、それとも不可能ですか?

4

1 に答える 1

1

で指定した先頭のスラッシュが原因です<form action>。指定した URL をドメイン相対にします。つまり、ブラウザのアドレス バーに表示される URL で現在要求されているパス (フォルダ) ではなく、ブラウザのアドレス バーに表示される URL のドメイン ルートに対して相対的に解決されます。

JSPがによって開かれていると想像してください

http://localhost:8080/contextname/some.jsp

したがって、URLにはフォルダーが含ま/contextnameれています。あなたが提出するであろうフォームアクション

http://localhost:8080/servletController/Controller

サーブレットは、実際には次の URL にあるマッピングに従っています。

http://localhost:8080/コンテキスト名/servletController/Controller

それに応じてフォーム アクションを修正し、ドメイン相対ではなくパス相対にします。

<form action="servletController/Controller">

または、有効なドメイン相対 URL を指定することによって:

<form action="/contextpath/servletController/Controller">

または、コンテキスト パスの動的性が心配で、ハードコーディングしたくない場合は、次のようにします。

<form action="${pageContext.request.contextPath}/servletController/Controller">

以下も参照してください。

于 2013-09-24T17:29:08.483 に答える