Servlet之属性和监听者
来源:互联网 发布:cydia软件源微信抢红包 编辑:程序博客网 时间:2024/06/07 14:31
这篇博文主要是《Head First Servlets & JSP》第五章的笔记,由于前四章主要讲基础,这里不会详细记录,以后抽时间把前四章进行一个总结。
本章知识要点:
- 怎样初始化servlet和ServletContext
- 编写servlet代码来增加、获取和删除属性
- 描述请求、会话和Web应用的Web容器生命周期事件模型
描述RequestDispatcher机制。
1,初始化参数
初始化参数在部署描述(DD)文件-web.xml中配置,模板代码为:
<servlet> <servlet-name>simpleDemo</servlet-name> <servlet-class>TestInitParams</servlet-class> <!--这里设置初始化参数 --> <init-param> <param-name>myEmail</param-name> <param-value>emailname@csdn.com</param-value> </init-param></servlet>
在servlet中,读取初始化参数的示例代码为:
String initParameter = getServletConfig().getInitParameter("myEmail");
容器在初始化一个servlet时,会首先从DD中“读出”servlet初始化参数,并把这些参数教给ServletConfig,然后把ServletConfig传递给servlet的init()方法。注意到,在超类中,init()方法有两个版本,一个没有任何方法,另一个init(ServletConfig)方法则会调用无参数的init()方法。servlet在初始化的时候调用的有参数的init方法会得到一个ServletConfig的reference。
要使初始化参数有效,必须重新启动web容器,或者使用支持热部署的web容器。初始化参数只有serlvet能看到。
2,请求属性
请求属性有请求对象设置:
request.setAttribute("attr", value);
得到请求的任何其他servlet或JSP都能使用这些属性。用于向视图返回一些值。
3,上下文初始化参数
上下文初始化参数对整个web应用可见,web应用中的servlet和JSP都能访问上下文初始化参数。上下文初始化参数在web应用启动时就初始化了,而不是加载servlet时初始化,上下文初始化参数可以看作时全局参数,也是在web.xml中配置。示例代码:
<servlet> <!--something about servlet --></servlet><context-param> <param-name>contextParam</param-name> <param-value>contextValue</param-value></context-param>
在servlet代码中获取context parameter:
String contextValue = getServletContext().getInitParameter("contextParam");
每个servlet有一个ServletConfig
每个Web应用有一个ServletContext
4,监听者(listener)
监听者能监听一个上下文初始化事件,并得到上下文舒适化参数,并在web应用为客户提供服务之前运行一段代码。ServletContextListener类就是用来完成这个任务的。
ServletContextListener能监听ServletContext的初始化和撤销两个重要事件。
在一个需要访问数据库的应用中,有很多servlet需要访问数据库,但是由于上下文初始化参数只能时String型,无法完成这样的任务。一种常见的做法是使用ServletContextLisener:
- 上下文初始化时得到通知。
- 从ServletContext得到上下文初始化参数
- 使用初始化参数查找名建立一个数据库连接
- 把数据库连接存储为一个属性,使得web应用的各个部分都能访问数据库。
- 上下文撤销(web应用取消部署或结束)时得到通知,关闭数据库。
在web.xml中配置监听者:
<listener> <listener-class> com.example.MyServletContextListener </listener-class></listener>
web容器通过监听者实现的接口判断监听者监听的时什么类型的事件。
监听者能监听很多事件,包括:上下文属性、servlet请求和属性,以及HTTP会话和会话属性相关的事件
5,属性
属性就是一个对象,可能设置到另外3个servlet API对象中的某一个,包括ServletContext、HttpServletRequest或者HttpSession。可以简单地认为属性时一个映射实例对象中的名/值对(名是一个String, 值是一个Object)。
属性有三个作用域:上下文、请求和会话。应用中的每个部分都能访问上下文属性,而会话属性只有能访问特定HttpSession的部分才能访问,请求属性则只有能访问特定ServketRequest的部分才能访问。
上下文作用域不是线程安全的!
因为应用中的每个部分都能访问上下文属性,而容器对http请求是并发处理的,每个请求在一个单独的线程中处理,此时多个线程可能同时访问这个上下文属性,因此上下文作用域不是线程安全的。
HttpSession也不是线程安全的
因为当一个客户同时发出多个请求时,此时多个线程就可以同时访问HttpSession属性。
请求属性和局部变量是线程安全的
请求属性的使用场景:请求分派。MVC应用中,控制器与模型通信,得到视图建立相应所需要的数据,这些数据只针对某个请求,因此把它放在请求属性红。
- Servlet之属性和监听者
- servlet属性和监听者整理(3)
- 05. 属性和监听者
- Servlet事件监听器、监听servletContext域对象创建和销毁、监听三个域对象属性变化
- Servlet事件监听器、监听servletContext域对象创建和销毁、监听三个域对象属性变化
- Servlet监听和软件国际化
- 属性与监听者
- Servlet监听案例之统计在线人数
- servlet和jms从activemq监听消息
- HttpServlet请求处理和Servlet监听
- Servlet监听
- Servlet监听
- servlet监听
- servlet监听
- servlet监听
- servlet监听
- servlet监听
- servlet监听
- 安卓自定义View雷达图(蜘蛛图)教程
- Kubernetes Node Controller源码分析之执行篇
- Java基础知识1
- MySQL优化
- 9.COM中特殊类型和相关函数
- Servlet之属性和监听者
- RHEL6配置yum源
- 怎样成为技术达人
- redis整合spring(redisTemplate工具类)
- JAVA企业面试题精选 Java SE 61-70
- 数据库的ACID
- 第三方水波纹效果
- DC
- 二维数组中的查找