JSP屬性保存范圍 JSP中提供了四種屬性保存范圍,分別為page,request,session及application。 1、page范圍,指設置的屬性只在當前頁面有效。通過pageContext的setAttribute()方法來設置屬性,通過pageContext的getAttribute()來取得屬性. 代碼范例: <% pageContext.setAttribute("name","James"); %>
<%
String str=(String)pageContext.getAttribute("name"); %> 2、request范圍,指屬性在一次請求范圍內有效。如果頁面從一個頁面跳轉到另一個頁面,那么該屬性就失效了。這里的跳轉指的是客戶端跳轉。服務器端跳轉使用<jsp:forward>,該屬性仍然有效。 通過request的setAttribute()方法來設置屬性,通過request的getAttribute()方法來取得屬性。 代碼范例: 主頁面: <% request.setAttribute("name","James"); %>
<a href="aa.jsp">跳轉到aa</a> 跳轉頁面: <%
String str=(String)request.getAttribute("name"); %> 3、session范圍,也就是客戶瀏覽器與服務器一次會話范圍內,如果和服務器斷開連接,那這個屬性就失效了。 通過session的setAttribute()方法來設置屬性,通過session的getAttribute()方法來取得屬性。 如果重新打開瀏覽器,就不能獲得session范圍屬性了,因為會話已經結束。 4、application范圍,指整個服務器范圍,直到服務器停止以后才會失效。 通過application的setAttribute()方法來設置屬性,通過application的getAttribute()方法來取得屬性。 只要服務器不重啟,就能夠在任何頁面中獲得application范圍保存的屬性,重新打開瀏覽器也可以。 5、移除屬性:通過調用相應對象的removeAttribute()方法就可以移除指定屬性。
Request對象 request對象不但可以用來設置和取得request范圍變量,還可以用來獲得客戶端請求參數,請求的來源,表頭,cookies等。 1、獲得客戶端請求參數,包括: getParameter(String name) 獲得參數名為name的參數值; getParameterNames() 返回一個Enumeration,獲得所有參數的名稱; getParameterValues(String[] name) 獲得參數名為name的所有參數 getParameterMap() 返回Map,獲得所有參數封裝的Map實例。 代碼范例: 首先使用表單提交一個參數: <form action="request.jsp" method="post"> 用戶名:<input type="text" name="username"/>
<input type="submit" value="提交"/>
</form> 在request.jsp頁面中,接收參數: <% String username=request.getParameter("username");//如果為中文的話,需要設置pageEncoding。
out.println(username); %> 代碼范例:獲取所有的參數名稱, 主頁中設置多個參數,表單提交: <form action="request.jsp" method="post"> 用戶名:<input type="text" name="username"/> 密碼:<input type="password" name="userpassword"/>
<input type="submit" value="提交"/>
</form> 在request.jsp頁面中接收所有參數: <% Enumeration e=request.getAParameterNames(); while(e.hasMoreElements()){ String str=(String)e.nextElement(); out.println(str); } %> 通過搭配getParameterNames()和getParameter(),可以很方便的獲取所有參數的參數值,對上述代碼進行修改: <% Enumeration e=request.getAParameterNames(); while(e.hasMoreElements()){ String str=(String)e.nextElement(); String strRequest=request.getParameter(str); out.println(str+":"+strRequest+"<br/>"); } %> 有些情況下一個參數可能擁有多個參數值,比如多選框,多選列表。要接收多個參數值,就需要使用request對象的getParameterValues()方法。 <form action="request.jsp" method="post"> 用戶名:<input type="text" name="username"/> 密碼:<input type="password" name="userpassword"/> 喜歡的運動: <input type="checkbox" name="sport" value="pingpang">乒乓球 <input type="checkbox" name="sport" value="basketball">籃球 <input type="checkbox" name="sport" value="football">足球<br/>
<input type="submit" value="提交"/>
</form> 在request.jsp頁面中修改代碼: <% String[] strArr=request.getParameterValues("sport"); out.println("喜歡的運動:"); for(String str:strArr){ out.println(str); } %> 最后,可以通過request對象的getParameterMap()方法來獲得封裝所有參數值的Map對象。通過該Map對象可以獲得指定參數的參數值。 代碼范例: <% Map mapParamter=request.getParameterMap(); String[] strUsername=(String[])mapParamter.get("username"); …… %>