講這些,我們先來了解一下request.setAttribute和request.setAttribute()這兩種方法的作用。
request.getAttribute("nameOfObj"); 可得到jsp頁面表單中輸入框內的value。(其實表單控件中的Object的name與value是存放在一個哈希表中的,所以在這里給出Object的name會到哈希表中找出對應它的value)
request.setAttribute(position,nameOfObj);屬於頁面之間的傳值,從a.jsp到b.jsp一次傳遞,之后這個request就會失去他的作用范圍,再傳就要重新設一個request.setAttribute()。(使用session.setAttribute()會在一個過程中始終保持這個值)
注:javascript與jsp中不能相互傳值,因為javascript運行在客戶端,jsp運行在服務器端。若想使他們能夠相互傳參數,可以在jsp頁面中設置一個hidden屬性的控件,用它的value來傳遞所需的數值。
1、把js直接寫在了JSP頁面,所以能獲取到。如果單獨把JS抽離出來是不可能獲取到的。前者服務端解析能或許到,后者客戶端解析獲取不到。
2、js里是在客戶端執行的,不能直接獲取,因為EL表達式是在服務器的時候被解析的,所以可以獲取到。一個是客戶端的東西,一個是服務器端的東西。
3、jsp能取到,那是因為他本身就是servlet。js不可能有方法直接獲取到HttpServletRequest里面的屬性值。
4、setAttribute是服務器行為,到了客戶端就無效了,也談不上如何用。除非你在jsp的時候就寫到js變量里,或者使用ajax請求你需要的數據。
下面開始進入正題:
java后台通過:
request.setAttribute("msg","成功!!");
在jsp/html頁面就可以通過EL表達式獲取到request中設置的屬性值:
<div>${msg}</div>
js中獲取request中的值,就有兩種方式:
第一種:
var msg="<%=request.getAttribute("msg")%>"; alert(msg);
第二種:
var msg="${msg}"; alert(msg);
這里不能寫在引入的js頁面中,上面已經說了,他們解析的方式不同,寫在外部的js中識別不了,可以通過在html.jsp頁面中設置一個隱藏域,然后獲取它的value值。如:
JSP中: <input type="hedden" value="${student.name}" id="stuName"/> javascript中: var stuName=$('stuName').value;
