Servlet作用域从小到大是这样排列的,page,request,session,pageContext。
page只是作用于当前请求的页面
request是一次请求,根据HTTP无状态,所以可以知道每一次请求对象是不同的。
session是一次会话,比如有些网站需要登录后才能查看资源,从登录到你关闭浏览器后,这就是一次会话,session是存在服务端的。还有一种情况,有时你在一个网页上长时间没操作,再操作会让你重新登录,这也是session的问题,服务器那边设置了session失效的时间。
pageContext是在整个Web应用上都是有效的,可以理解为所有的网页,因为这个对象是常常用来共享资源的,也就是用户1提交了一个资源,放到了pageContext作用域中,其它用户也可以看到这个资源。
request.getAttribute():是request时设置的变量的值,
用request.setAttribute(“name”,“您自己的值”);来设置值,
request.getParameter(): 用来提取客户端传过来的参数信息
request.getParameter是用来接受来自get方法或post方法的参数
request.getAttribute()获得的是对象类型,而request.getParameter()获得的是字符串类型
EL表达式中,param和requestScope的区别
在看param和requestScope之前,不妨先了解下在java下request的情况:
-
request对象通常用来接收客户端提交到服务端的数据,如:在servlet或者action中可以用request.getParameter()的方法获取获取参数内容;
-
requestScope通常是在servlet或者action的服务端中通过request.setAttribute()方法把数据放到request对象中供客户端获取,然后客户端获取的方法就是requestScope.getAttribute()。
-
getParameter:
可以获取URL中传递过来的String参数,如:http://www.baidu.com?username=abc 中的abc;
提示:对于POST/GET提交的表单,在服务器端我们都可以通过request.getParameter获取表单中的值。
当我们在进行一个请求重定向(redirect)的时候,我们可以通过request.setParameter传递参数,如果用request.setAttribute在重定向页面是取不到值的。
(待验证,因为HttpServletRequest中没有setParameter方法。)
- getAttribute:
获取的是一个对象(Object)。
当我们进行一个请求转发(forward)的时候,可以使用request.setAttribute传递参数。
- requestScope作为El表达式中的使用:
是EL表达式中的一个隐含对象,类似request,如:${requestScope.username} 表示在request域中取得username属性所对应的值,相当于request.getAttribute(“username”)。
- param,El表达式中的使用:
${param.username} 可理解为:request.getParameter(“username”);
结论:
${param.name} 等价于 request.getParamter(“name”),这两种方法一般用于服务器从页面或者客户端获取的内容,这些内容都是String的。
${requestScope.name} 等价于 request.getAttribute(“name”),一般是从服务器传递结果到页面,在页面中取出服务器端保存的值!