标签:例子 获取 接管 用户 ring text 类型转换 编写 except
容器建立一个Servlet时,会读DD,并为ServletConfig创建名/值对。容器不会再读初始化参数了,除非重新部署Servlet。
Tomcat包括一个管理工具,可以部署、取消部署、重新部署整个Web应用而不必重启Tomcat。
若初始化参数的值经常变化,最好让Servlet方法从一个文件或数据库得到值;不过这也意味着每次Servlet代码运行时都会有更多的开销,而不是只在初始化期间有开销。
上下文初始化参数与Servlet初始化参数很类似,不过上下文参数对整个Web应用而不只是一个Servlet可用。
意味只需在DD一个地方制定参数,所有Servlet和JSP都自动地能访问上下文参数。
如果应用是分布的,那么每个JVM有一个ServletContext
为什么
若想Web应有的所有部分都能访问一个共享的数据连接,怎么办?
首先,把DataSource查找名放在一个上下文初始化参数,没问题;
其次,把这个String参数转化为一个具体的DataSource谁来做,servlet?不可以!
因为,如何保证这个servlet最先运行?那么用这个新的事物——监听器。
怎么做
需要一个单独的对象,它可以:
以下要做的是把一个对象Dog放在ServletContext中:
普通HttpSessionAttributeListener类只想知道会话合适增加、删除或替换了某种类型的属性;
HttpSessionBindingListener使得属性本身知道它何时增加到一个会话中,或者合适从会话中删除;
属性就是一个对象,设置(也称绑定)到另外3个servlet API对象中——ServletContext、HttpServletRequest或HttpSession。
可以把它简单认为是一个映射实例对象中的名/值对(名是一个String,值是一个Object)。
实际中,我们只关心属性所在的作用域,即谁能使用这个属性,以及属性能存活多久。
属性不是参数
名称 | 属性 | 参数 |
---|---|---|
设置方法 | setAttribute(String name,Object value) | 不能设置应用和servlet的参数,它们都在DD中设置 |
返回类型 | Object | String |
获取方法 | getAttribute(String name),注意必须强制类型转换,因为返回Object | getInitParameter(String name) |
注意,实例变量不是线程安全的,因为多个用户请求一个servlet时,意味多个线程在运行该servlet代码,而且所有线程都能访问servlet的实例变量,因此实例变量不是线程安全的。
RequestDispatcher view=request.getRequestDispatcher("result.jsp");
RequestDispatcher view=getServletContext().getRequestDispatcher("/result.jsp");
view.forward(request,response);
注意名词:
- Servlet初始化参数
- 上下文初始化参数
《Head First Servlets & JSP》-5-属性和监听
标签:例子 获取 接管 用户 ring text 类型转换 编写 except
原文地址:http://www.cnblogs.com/myitroad/p/6192521.html