0

I want to store a HttpServletRequestobject in a HttpSession as an attribute.

     protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {       
request.getSession().setAttribute("ses",request);  

Here is how I get it back in another servlet,

HttpSession ses=r.getSession(false);
HttpServletRequest rq=(HttpServletRequest)ses.getAttribute("ses");  

Here rq is not nul when I check it in a if statement. My problem is, when I try to get a parameter which is in the request object, a null-point exception is thrown. How can I store a request as I can get parameters back again?

4

1 に答える 1

4

これは不可能であり、技術的にも意味がありません。関連する HTTP サーブレット応答がコミットされて終了すると、HTTP サーブレット要求インスタンスは期限切れ/ガベージされます。したがって、HTTP サーブレット リクエスト インスタンスは、別のリクエストでは無効になります。保存されたインスタンスはもう何も指していないため、メソッドを呼び出すと、すべての色で例外がスローされます。最初の HTTP サーブレット リクエストは、そのジョブの実行が既に終了しており、期限切れ/ガベージされています。

別のリクエストでアクセスしようとするのではなく、リクエストから必要な情報を正確に抽出し、その情報をセッションに保存する必要があります。例えば

String foo = request.getParameter("foo");
request.getSession().setAttribute("foo", foo);

その後

String foo = (String) request.getSession().getAttribute("foo");

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

于 2012-04-04T18:07:08.783 に答える