2015-07-22 68 views
0

我使用servlet將文檔上傳到服務器。成功上傳後,我需要向用戶顯示其他信息,例如使用哪個ID上傳哪個文檔。爲此,我將ID和文件名放入modelMap,我試圖在JSP頁面上發送它。將模型從servlet傳遞到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

要傳遞參數,你可以做類似resp.sendRedirect(「../ success.do?p1=abcd&p2=xyz」); –

+0

假設用戶選擇要上傳的100個文件,因此文件名和上傳的網址超過256個字符限制。所以我們不能使用這個。 –

+2

如果允許用戶上傳多個文件,那麼其他選項可能是在會話中設置地圖,然後重定向請求,並從那裏我們可以得到地圖,然後從會話中刪除該變量。 –

回答

0

真的不能張貼此評論,因此將其作爲一個答案。

如果你的主要動機是能夠上傳文件並隱藏servlet url,那麼使用AJAX進行文件上傳怎麼樣?

下面是示例代碼段

JSP:


<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); 
     } 
    };     
} 

這就是從這裏 http://www.technicaladvices.com/2011/12/10/ajax-file-upload-to-a-java-servlet-in-html5/

和課程採取有很多EXA的使用JSP + JQUERY

在servlet的側mples你總是可以使用類似

PrintWriter print = response.getWriter(); 

print.println(""); 

打印簡單的輸出

0

好了,所以你必須通過一個重定向到通過任意大量的信息。一些框架發明了他們稱之爲flash的用法。引擎蓋下,它意味着:

  • 在重定向頁面重定向
  • 之前保存的信息在會話一個衆所周知的屬性名稱(或模式)下,看在會話中是否存在閃光燈屬性,如果有一個,把它放在請求和會話

優點刪除它:它可以讓你模擬的請求穿過重定向

注意事項屬性:它ñ與中間的AJAX調用非常協調,因爲閃存通常用於下一個請求,但通常它對於重定向工作正常。

可能的實現:

  • ,如果你在一個位置在您的應用程序使用它,只需在會話中使用的專用屬性名稱,將其設置在servlet做的重定向,並且在servlet得到它(或JSP),如果您打算在整個應用程序中使用它,您應該考慮使用處理此(這些)Flash屬性的過濾器,並編寫一種將屬性放入Flash併發送重定向響應以確保它在整個應用程序中保持一致並易於維護。