本质的区别
- Parameter是参数,本质上是字符串String,
对其操作的方法只有getParameter(“参数名”) - Attribute是属性,本质上是对象Object,
对其操作的方法有setAttribute(“属性名”,属性)和getAttribute(“属性名”)
对象的区别
- 对Parameter进行操作的对象只能是request对象,Parameter由前端form表单提交或者url传值的方法放入request。
- 对Attribute进行操作的对象可以是request对象、session对象还可以是servletContext对象,其区别在于各自的作用域不同,相互之间互不影响,在指代不明的情况下会有相互替代的可能,如使用el表达式时。
方法的区别
- Parameter只有getParameter(“参数名”)方法,而没有setParameter()方法,要设置Parameter参数的值只能是由前端form表单提交或者url传值(?id=admin&pwd=000&参数名=参数值)的方法。
1 2 3 4 5 | <!–form表单传值–> <form> <input type=”text” name=”id” value=”admin” /> <input type=”text” name=”参数名” value=”参数值为输入框中实际输入的内容” /> </form> |
getParameter(“参数名”)方法的返回值是String类型,若不存该参数名则返回null
url传值时用?后缀在url之后,以键值对的方式传值,多个键值对之间用&连接
- Attribute同时有getAttribute(“属性名”)方法和setAttribute(“属性名”,属性)的方法,其可以被request对象、session对象和servletContext对象调用,当对象调用getAttribute()方法时,只能获取相同对象使用setAttribute()方法设置的属性对象。
其作用域有包含关系servletContext(session(request)),当在前端使用el表达式获取属性时,将由作用域从小到大找寻对应的属性,也就是前端如果想要获取session设置的属性obj1,但是恰巧request也设置了名为obj1的属性,那么将获取到request设置的obj1属性。
getAttribute(“属性名”)方法的返回值是object类型,若不存在该属性同样返回null
作用域的区别
- Parameter只在request的作用域中有效,也就是一旦发生新的请求,原来的请求中的参数也都随着原request的失效而失效。
- Attribute有三个不同的作用域,其也会在其各自作用域失效的同时而失效,但无疑多了更多选择。
比如session1下的request1中获取到了一个属性obj1,并将其存入了session1中,于是即使request1被销毁而失效,session1下的其他request比如也可以获取session1中的属性obj1进行进行操作。