簡體   English   中英

將模型從Servlet傳遞到JSP頁面

[英]Pass model from servlet to JSP page

我正在使用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 

不能真正發表此評論,因此將其添加為答案。

如果您的主要動機是能夠上傳文件並隱藏servlet網址,那么使用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/

當然,有很多使用JSP + JQUERY的示例

在servlet方面,您始終可以使用類似

PrintWriter print = response.getWriter();

print.println("");

打印簡單的輸出

好的,因此您必須通過重定向傳遞任意大量的信息。 一些框架發明了這種用途的閃存 在引擎蓋下,它意味着:

  • 在重定向之前,以眾所周知的屬性名稱(或模式)將信息保存在會話中
  • 在重定向的頁面中,查看會話中是否存在Flash屬性,如果存在,則將其放入請求並將其從會話中刪除

優點:它允許您模擬通過重定向的請求屬性的傳遞

注意:在中間的AJAX調用中,它不能很好地工作,因為Flash通常用於下一個請求,但對於重定向,它通常可以正常工作。

可能的實現:

  • 如果您在應用程序的單個位置使用它,則只需在會話中使用專用的屬性名稱,在進行重定向的servlet中設置它,然后在您重定向的servlet(或JSP)中獲取它
  • 如果您打算在整個應用程序中使用它,則應考慮使用處理此Flash屬性的過濾器,並編寫一種將屬性放入Flash並發送重定向響應的方法,以確保它將在整個應用程序中保持一致,並易於維護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM