2013-02-19 131 views
0

我是新來的JSP,當我嘗試調用名爲CID和密碼的一些參數一個jsp頁面,我得到這個錯誤,我一直在嘗試的代碼在下面給出,我已經經歷了使用谷歌搜索看到的同樣的錯誤,但我仍然遇到同樣的問題。 代碼是:獲取異常java.lang.IllegalStateException:getOutputStream方法()已經被調用,這種響應

<body> 
     <% 

     String cidMessage = "cID"; 
     String passEncrypted = "passWord"; 
     System.out.println("CID ISSSSSSSSSSSS"+cId); 
     if ((cId.equals(cidMessage)) && (passWord.equals(passEncrypted))) { 
         System.out.println("Validation Correct"+cId); 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      Date date = new Date(); 
      String time = sdf.format(date.getTime()); 
      String xmlOutput = "<smsreport>" 
        + "<date>" + time + "</date>" 
        + "<result>" + "SUCESS" + "</result>" 
        + "<msgid>" + currentTimeMillis() + "</msgid>" 
        + "<msgparts>" + "1" + "</msgparts>" 
        + "</smsreport>"; 

      try { 
       byte[] contents = xmlOutput.getBytes(); 
       response.setContentType("text/xml"); 
       response.setContentLength(contents.length); 
       response.getOutputStream().write(contents); 
       response.getOutputStream().flush(); 
      } catch (Exception e) { 
       throw new ServletException(e); 
      } 
     } else { 
          System.out.println("Validation Wrong"+cId); 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      Date date = new Date(); 
      String time = sdf.format(date.getTime()); 
      String xmlOutput = "<smsreport>" 
        + "<date>" + time + "</date>" 
        + "<result>ERROR</result>" 
        + "<msgid>" + "ErrorCode" + "</msgid>" 
        + "<msgparts>" + "ErrorMessage" + "</msgparts>" 
        + "</smsreport>"; 

      try { 
       byte[] contents = xmlOutput.getBytes(); 
       response.setContentType("text/xml"); 
       response.setContentLength(contents.length); 
       response.getOutputStream().write(contents); 
       response.getOutputStream().flush(); 
      } catch (Exception e) { 
       throw new ServletException(e); 
      } 

     } 
    %> 
</body> 

回答

0

您不應該在JSP內部嘗試這樣做。 JSP已經獲得了一個輸出流來寫它的輸出。你需要使用一個servlet來返回你的XML。

當你調用response.getOutputStream,它與該JSP(這將彙編成一個servlet)已經獲得的輸出流的事實相矛盾。這就是它導致IllegalStateException的原因。

1

這是一個將scriplet轉換爲Servlet文件的JSP。您不需要顯式調用響應對象。如果您需要了解已部署的已編譯JSP的外觀,請搜索(Google)如何查找服務器上已編譯的類(由JSP生成的Servlet)。既然你已經呼籲應對方法的第二次調用是響應對象

2

拋出IllegalStateException - 如果此響應已調用getWriter方法。

  • 這意味着,你可以調用getWriter()getOutputStream()方法。

  • 現在在JSP(並最終在編譯servlet)中,有一個隱式變量定義爲out。這只不過是PrintWriter類的一個實例。這意味着,響應對象,getWriter()已經被調用,因此在調用getOutputStream()IllegalStateException

  • 現在,作爲這個問題的解決方案,如一些人所指出的那樣,將這些代碼到您擁有完全控制一個servlet並以您想要的方式使用輸出流。

相關問題