request.getParameter 和 request.getAttribute 区别
搜了一下,整理如下……
首先在看遇到的问题:
在浏览器地址输入,表示传入一个参数test,值为123
http://localhost:8888/Test/index.jsp?test=123
在index.jsp中尝试使用EL表达式取出,代码如下:
<body> ${test} </body>
发现毫无结果,再使用requestScope尝试取出:
<body> ${requestScope.test} </body>
发现还是毫无结果,感到非常诧异,遂干脆使用java脚本尝试取出。
<body> <%request.getAttribute("test"); %> </body>
依然无解。
之后发现,若使用已下代码向request作用域赋值,则用上面代码可以取出
<% request.setAttribute("test", "123"); %>
查询资料后发现,使用以下代码可以取出之前的请求参数:
EL:
<body> ${param.test} </body>
JAVA脚本:
<body> <%=request.getParameter("test") %> </body>
结论就是:${param.name} 等价于 request.getParamter("name"),一般是从页面或者客户端获取的内容,
${requestScope.name} 等价于 request.getAttribute("name"),一般是从服务器段传过来的,可以传到客户端也可以传到服务器里面(即,方法1传到方法2,服务器内部的传输)
pageContext.request是一个具体的对象,在你的http请求过程中存在。
requestScope是一个定义, 表明一个http请求的整个声明周期,它只是一个定义而已,不是一个对象。 EL中你可以在这个周期中放置、获取对象。(当然,其实真正的操作也是针对request对象的)。
requestScope通常是将某个变量或者对象在servlet或者acion中通过request.setAttribute()方法放入到request对象中,然后在页面中使用requestScope来进行数据的显示的
而request.getparameter则是则是更多的用在servlet或者action中,它的作用是接受表单提交来的数据,比如你的jsp页面中的表单提交的数据。
两者的区别是:requestScope更多的用于展示页面,从request对象中取出对象或者变量来显示,而request中的对象或者变量也是程序员通过手动的方式request.setAttribute方法来放入request对象中的
而request.getparameter则更多的应用于后台的方法中,它的参数不是程序员手动设置的,而是由表单来接受用户输入的值会随着用户的请求被放入request对象中。