blobstore上传后通过重定向携带成功消息?

时间:2010-07-07 20:18:11

标签: google-app-engine jsp servlets

我使用以下内容将图像保存为blob,但我不确定如何通过最终重定向传送消息以显示给用户:

JSP文件:

<%
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
String action = blobstoreService.createUploadUrl("/servletimg");
%>

<form method="POST" action="<%= action %>" enctype="multipart/form-data">
   ...
</form>

目标servlet:

public class ServletImg extends HttpServlet 
{   
    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
    {
         saveImg(...);

         req.setAttribute("msg", "worked ok!");

         resp.sendRedirect("/");    
    }
}

我们重定向到的最终jsp页面:

if (request.getAttribute("msg") == null) {
    Log.e("Hey we're missing the expected attribute!!!");
}

一切正常,我的图像被保存等,但是当重定向回主jsp页面时,我没有看到“msg”属性。有没有办法传递消息,或者我必须在重定向中将其作为参数附加,例如:

resp.sendRedirect("/?msg=it worked ok!");

由于

1 个答案:

答案 0 :(得分:1)

重定向基本上指示客户端向服务器发送 HTTP请求。初始请求(和响应)将被包含,包括所有属性集。所以是的,你真的需要在重定向URL上传递一个参数。

response.sendRedirect("index.jsp?msg=" + URLEncoder.encode("worked ok!", "UTF-8"));

然后在JSP

<p>Message: ${param.msg}</p>

或者,您也可以转发到相关资源,即

request.setAttribute("msg", "worked ok!");
request.getRequestDispatcher("/index.jsp").forward(request, response);

然后在JSP中(作为ugly and discouraged scriptletrequest.getAttribute("msg")的简写):

<p>Message: ${msg}</p>

使用转发,初始请求仍将在目标资源中可用。