關於forward(html/jsp)解析……

來源:互聯網
上載者:User

    無論是RequetDispatcher.forward還是HttpServletResponse.sendRedirrect()在調用它們之前都不能有內容已經被實際輸出到用戶端!!如果緩衝區中已有一些內容,這些內容將被清除!!

JspFractory  
_jspxFactory.releasePageContext(_jspx_page_context)

有多個PrintWriter或者JspWriter對象時  先把內容輸出到緩衝區!到jsp頁面結束時才把內容輸出!!

  在jsp頁面中調用pageContext.forward()進行頁面轉向!Servlet
如果轉向html靜態檔案!因為這是市轉向default servlet 沒有PrintWriter對象產生 所以在default
serlet會調用getServletOutputStream!然後返回jsp頁面!繼續完成剩下的頁面!!這時又向緩衝區列印!這時就報錯   !1
如果要想不報錯!只能在jsp頁面調用response.getWriter顯式的產生PrinterWriter對象!!這樣在default servlet 中才會使用這個printWriter對象!輸出頁面內容!!

     <%
     response.getWriter();
   
     pageContext.forward("test.html");
    %>

 

   html常常出現快取頁面面的情況!如果你這次訪問成功!下次訪問的頁面應該失敗!但還是正確的頁面!這是因為緩衝的結果!!

 

如果轉向Servlet 但 Servlet中開啟了OutputStream流!則會報錯!!與jsp頁面的out衝突!!
  <%
     pageContext.forward("servlet/testForward");
  
    %>

testForward Servlet
public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException
{
ServletOutputStream sos=response.getOutputStream();
}

再看
<body>
1
<%
      PrintWriter pw= response.getWriter();
      pw.print("3");
   
 %>
 2
</body>
列印出  312

編譯的Servlet代碼為JspWriter out = null;

 

JspWriter  和 PrintWriter關係!!

JspWriter繼承了java.io.Writer
同樣 PrintWriter也是其子類!!也就是在jsp頁面輸出時  只要是Writer子類!則把內容輸出到一個緩衝區內!!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.