【发布时间】:2015-07-22 16:19:26
【问题描述】:
我正在使用 servlet 将文档上传到服务器。成功上传后,我需要向用户显示附加信息,例如使用哪个 id 上传的文档。为此,我将 ID 和文件名放在 modelMap 中,我试图在 JSP 页面上发送它。
为此,我正在使用此代码:-
ModelMap model = new ModelMap();
for(FileItem item : files) {
model.put(id, fileName);
}
req.setAttribute("message", model);
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/success.do");
dispatcher.forward(req, resp);
在 JSP 页面上
<%
if(request.getAttribute("message")!=null){
String value = request.getAttribute("message").toString();
if(value!=null)
{
value = value.substring(1, value.length()-1); //remove curly brackets
String[] keyValuePairs = value.split(","); //split the string to creat key-value pairs
for(String pair : keyValuePairs) //iterate over the pairs
{
String[] entry = pair.split("="); //split the pairs to get key and value
out.println("<font color='red'>"+entry[1].trim()+"</font> indexed with id <font color='red'>"+entry[0].trim()+"</font><br/>");
}
}
System.out.println(request.getAttribute("message"));
}
%>
我的问题是在这个场景中所有的东西都在工作,除了一个。当我上传文档消息时显示,但我的 URL 仍然是上传的 servlet URL。所以当用户点击它(GET请求)时,servlet会抛出一个上传文件的异常。
如果我使用
resp.sendRedirect("../success.do");
然后我不能在其中传递参数。那么我该如何完成这个任务呢?
我的文件上传servlet是
mySite/upload/servlet
成功页面是
mySite/success.do
【问题讨论】:
-
要传递参数,您可以执行类似 resp.sendRedirect("../success.do?p1=abcd&p2=xyz");
-
假设用户选择上传 100 个文件,因此文件名和上传 ID URL 超过 256 个字符的限制。所以我们不能用这个。
-
如果允许用户上传多个文件,那么其他选项可能是在会话中设置地图,然后重定向请求,从那里我们可以获取地图,然后从会话中删除变量。跨度>
-
是的,投了赞成票,但这不是一个好习惯,我不想对每个请求都使用会话。
-
另一种方法是在 servlet 的输出中提供一个 html 表单,该表单由 javascript 自动提交到 /success.do