我使用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
答案 0 :(得分:0)
无法发布此评论,因此将其添加为答案。
如果您的主要动机是能够上传文件并隐藏servlet网址,那么如何使用AJAX进行文件上传?
以下是示例代码段
JSP:
12
这是从这里开始的 http://www.technicaladvices.com/2011/12/10/ajax-file-upload-to-a-java-servlet-in-html5/
当然,有很多使用JSP + JQUERY的例子
在servlet端,你总是可以使用类似
的东西<script type="text/javascript">
function performAjaxSubmit() {
var sampleText = document.getElementById("sampleText").value;
var sampleFile = document.getElementById("sampleFile").files[0];
var formdata = new FormData();
formdata.append("sampleText", sampleText);
formdata.append("sampleFile", sampleFile);
var xhr = new XMLHttpRequest();
xhr.open("POST","/fileUploadTester/FileUploader", true);
xhr.send(formdata);
xhr.onload = function(e) {
if (this.status == 200) {
alert(this.responseText);
}
};
}
打印简单输出
答案 1 :(得分:0)
好的,所以你必须通过重定向传递任意大量的信息。一些框架为这种用法发明了他们所谓的 flash 。在引擎盖下,它意味着:
优点:它允许您通过重定向模拟请求属性的传递
警告:中间的AJAX调用效果不佳,因为闪存通常用于下一个请求,但通常它适用于重定向。
可能的实施: