getParameter(String)和getAttribute()这两个方法都是从request对象中获得参数的方法。但实际上他们之间有着本质的区别。
1. getParameter()是指客户端和server端之间的数据传递。我们在从浏览器端发出一个请求到server端时(无论是GET和POST方式),所有的参数都是被包装成了String的形式之后才被传递到server端的。所以,我们在server端的代码中就可以通过request.getPapameter(String)的方式来取得。
2. getAttribute()一向是和setAttribute()一起使用的,只有先用setAttribute()设置之后,才能够通过getAttribute()来获得值,它们传递的是Object类型的数据。而且必须在同一个request对象中使用才有效。
何谓同一个request呢?例如,在同一个servelet中,同一个Action中(Struts),同一个JSP中等等;或者是同一个request被forward了多次,那么每一个处理这个request对象的web组件都是使用的同一个request对象;或者include的方式也是一样的。
从以上分析,这两者之间的区别就很明确了。getParameter()是在数据从客户端到server端之后才有效的,而getAttribute()则是server端内部的事情,只有在server端调用了setAttribute()之后,并且没有redirect,没有到客户端之前,getAttribute()才有效。
同理,getParameterNames()和getParameterValues(String)跟getParameter(String)是一样的道理。