1

私のweb.xmlで、次のようなサーブレットを設定しました

<servlet>
    <servlet-name>forward</servlet-name>
    <servlet-class>test.Forward</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>forward</servlet-name>
    <url-pattern>/f/*</url-pattern>
</servlet-mapping>

test.Forward#doGetとして実装されます

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    req.getRequestDispatcher("target.jsp").forward(req, resp);
}

localhost:8080 / project / f / anypathにアクセスすると、スタックオーバーフローエラーが原因でサーバーがクラッシュします。

/f/target.jspへの別のリクエストをRequestDispatcher#forward設定してから、もう一度呼び出されたようです。どういうわけか、ページをレンダリングするだけだと思っていました。test.Forward#doGetRequestDispatcher#forward

では、JSPをレンダリングするだけのメソッドはありますか?

4

1 に答える 1

1

サーブレットパスは/f/ *であり、そのパス上にあるファイルにリダイレクトしています。ほとんどの場合、意図せずに次のようになります。

/f/target.jsp

その結果、サーブレットが何度も何度も自分自身を呼び出し続けるため、これにより無限のループが作成されます。

JSPにリダイレクトする場合は、/ jsp / target.jspの場所などの別のフォルダーにあると思いますか?その場合は、フルパスを含めるようにしてください。

req.getRequestDispatcher("/jsp/target.jsp").forward(req, resp);

/省略すると、リクエストは現在のrequestURIを基準にして転送されます。

于 2012-05-18T04:11:27.473 に答える