什么是属性
属性就是一个对象,可以设置到(绑定)到另外3个servlet API对象中的一个,包括ServletContext、HttpSession、HttpServletRequest(ServletRequest)。
可以简单的认为是一个映射实例对象中的名/值(名--String,值--Obeject)。
属性不是参数
三个作用域
属性API
属性安全问题
作用域在ServletContext的属性显然不安全,因为webapp的所有线程都可以访问处理。再想一想,HttpSession的属性是不是安全的呢?一般人的回答是线程安全的,但是这是错误的。如果再打开一个浏览窗口(即使在另一个浏览器中),但容器仍认为这是同一个会话,这也就造成了多个线程在一个会话中,所以HttpSession中的属性不是线程安全的!
这就需要用线程的知识解决了。只需对ServletContext/HttpSession同步即可,千万不能对servlet进行同步,否则就会只有一个线程可以访问servlet,导致效率很低。
只有请求属性和局部变量是线程安全的
请求属性与转发
如果希望应用的其他组件[Servlet/JSP]接管全部或部分请求,就可以使用请求属性。
那么如何让组件的其他部分接管这个请求呢?用RequestDispatcher.
举个例子: