頁面間傳遞數據: 客戶端向服務器:
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是通過瀏覽器來做轉向的,所以只有在頁面處理完成後,纔會有實際的動作。既然你已經要做轉向了,那麼後的輸出還有什麼意義呢?而且有可能會因爲後面的輸出導致轉向失敗。
頁面之間傳值問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.