国庆快乐鸭,明天我们就要正式上线下课了,这大概是最短的国庆假期了,只要两天,希望祖国母亲越来越好,您的孩子们会努力的!!! 加油~~~
一、 Servlet参数 - ServletConfig
- 使用场景:我们想在 DD 中配置 email 地址,而不是硬编码到 servlet 类中
- 特点:只读取一次,在容器初始化 servlet 的时候 ,可将其看作部署时常量,运行时不可改变
问题1: 运行时不可改变岂不是每次修改 XML 内容就要重新部署?
是的,重启 Tomcat 即可,也可使用热部署,通过这种方式不必关闭正在运行的 Web 应用
问题2: JSP 如何得到 Servlet 初始化参数?
使用另一请求属性将模型信息传递给 JSP,JSP接收转发请求,显然这不适用于当变量是整个 Web应用 都需要使用的全局变量的情况,因此要引入 ServletContext
二、上下文初始化参数 - ServletContext
- 上下文初始化参数:对整个 Web 应用可用 ,即 servlet 和 JSP 都可以访问,配置方式如下:
<content-param>
<param-name>foo</param-name>
<param-value>bar</param-value>
</content-param>
2. 其他功能:
3. 与ServletConfig的区别:
每个servlet 有一个 ServletConfig ,每个 Web应用有一个 ServletContext
三、 监听器 - ServletContentListener
1. 监听器:监听事件,在应用为客户服务前运行一些代码
2. 功能:
- 监听上下文属性
- 监听 servlet 请求和属性
- 监听 HTTP 会话 和会话属性相关的事件
3. 场景:
4. 分类:
四. 属性
1. 属性: 就是一个对象,可以简单地认为是一个映射实例对象的名值对
2. 三个作用域: 上下文,请求,会话
3. 线程安全情况:
(1)上下文作用域不是线程安全的,整个 web 应用都可以访问,怎么可能安全
解决:而是对上下文加锁,对 servlet 加锁(同步服务方法)不能保护上下文属性,因为我们只是自己不访问了,不能阻止其他 servlet 访问
(2)会话属性也不是线程不安全,一个客户可以打开多个浏览器窗口
解决:HttpSession 同步
(3)请求属性和局部变量是线程安全的
4. 请求分派:
希望应用的其他组件接管全部或部分请求,用到 RequestDispatcher
RequestDispatcher 只含foward() include() 方法, RequestDispatcher可以从请求中得到或从上下文中得到,只需要告知把请求转发给那个 Web组件即可