頁面之間傳值問題

頁面間傳遞數據: 客戶端向服務器:
post方式(form,隱藏域)和get方式(URL,aa.jsp?param1=abc);

服務器端:
request,session,cookie,application

URL和aa.jsp?paraml=abc是一回事,後者是前者的一個例子.同樣的隱藏字段也是指包含在form中的隱藏字段
還有:可以用javabean一次性把前個界面的值自動賦到另一個界面
==============================================================================
一. 客戶端向服務器
    1--get方式
       <a href="xx.jsp?id=<%=id%>"></a>
       <a href="xx.jsp?id=2"></a>
       <script language='javascript'>alert("很牛!");window.location.href="index.jsp?dr="+a+"&drr"+c;</script>
       <script language='javascript'>alert("很牛!"); window.location.href="../index.jsp?dr="+a+"&drr"+c;</script>  
       
       function sefmessage(agentName)
       {
           alert(agentName);document.all.iframe.src="agentMessage.do?agentName="+agentName;
       }

      
       
    2--post方式
       <form action="xx.jsp?act=3" method="post" enctype="multipart/form-data" name="upfile" id="upfile">-->傳了值
       <input type="hidden" name="id" value="<%=id%>">-->隱藏傳值
       <input type="text" name="root">-->顯示傳值


二. 服務器端     
       response.setHeader("refresh","5","xx.jsp");
       response.sendRedirect("xx.jsp?="+id); --->跳轉之後 地址欄變爲……/xx.jsp 【客戶端跳轉】


       <jsp:forward page="xx.jsp">-->能否xx.jsp?id=2有待實踐-->跳轉以後地址欄不變【服務器端跳轉】
          <jsp:param name="g" value="<%=name%>"/>-->傳值
       </jsp:forward>

       <jsp:include flush="true" page="xx.jsp">
          <jsp:param name="t"value="<%=request.getParameter("id")>">
       </jsp>

     
       session.setAttrubute("name",name)
       -->是在多個頁面之中有效,而不是隻在兩個頁面中有效,直到關閉瀏覽器才失效
       -->瀏覽器a上的session,然後再啓動另外一個瀏覽器(頁面),session仍然存在,只不過session.getID()得不到,但是它確實存在
       -->session銷燬的三個條件 1.服務器停 2.設置的時間到 3.手動關閉.

    
       cookie
       application
       還沒用到

三. javaBean
       <jsp:useBean id="testBean" class="swing.useBean" scope="session"/>
        <jsp:setProperty name="testBean" property="*"/>
       </jsp:useBean>
        bookName:<%=testBean.getBookName()%>
        bookCompany:<%=testBean.getBookCompany()%>
     --> 通過表單提交過來的值,經過Bean自動的將字符串處理爲相應的數據類型,然後自動的與javaBean中的屬性
         相同的名稱進行匹配,感覺此處很智能,程序自己在做事



四. 使用response.sendRedirect的注意事項
首先我們要明白用response.sendRedirect做轉向的原理,它其實是向瀏覽器發送一個特殊的Header,然後由瀏覽器來做轉向,轉到指定的頁面,所以用sendRedirect時,瀏覽器的地址欄上可以看到地址的變化。
用<jsp:forward page=""/>則不同,它是直接在server做的,瀏覽器並不知道,也不和瀏覽器打交道,這從瀏覽器的地址並不變化可以看出。
所以使用response.sendRedirect時就需要注意以下兩點:
1,在使用response.sendRedirect時,前面不能有HTML輸出。
這 並不是絕對的,不能有HTML輸出其實是指不能有HTML被送到了瀏覽器。事實上現在的server都有cache機制,一般在8K(我是說JSP  SERVER),這就意味着,除非你關閉了cache,或者你使用了out.flush()強制刷新,那麼在使用sendRedirect之前,有少量的 HTML輸出也是允許的。
如果報錯說,“一些信息已經被submitted”(原文忘了),那麼,你就要注意看了,前面是不是有過多的HTML輸出了。

2,在response.sendRedirect之後,應該緊跟一句return;
我們已經知道response.sendRedirect是通過瀏覽器來做轉向的,所以只有在頁面處理完成後,纔會有實際的動作。既然你已經要做轉向了,那麼後的輸出還有什麼意義呢?而且有可能會因爲後面的輸出導致轉向失敗。

發佈了44 篇原創文章 · 獲贊 5 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章