Servlet技术2
一、ServletConfig接口
① Servlet接口的init(ServletConfig config)方法有有一个ServletConfig类型的参数。当Servlet容器初始化一个Servlet对象时,会为这个Servlet对象创建一个ServletConfig对象。在Servlet对象中包含了Servlet的初始化参数信息,此外,ServletConfig对象还与当前Web应用的ServletContext对象关联。Servlet容器在调用Servlet对象的init(ServletConfig config)方法时,会把ServletConfig对象作为参数传递给Servlet对象,init(ServletConfig config)方法会使得当前Servlet对象与ServletConfig对象之间建立关联关系。
② 在ServletConfig接口中定义了以下方法:
●getInitParameter(String name)
● getInitParameterNames()
●getServletContext()
●getSevletName()
③ 在web.xml文件中,配置<servlet>时可以为<servlet>配置0~N个初始化参数,例如:
<servlet> <servlet-name>xxx</servlet-name> <servlet-class>cn.servlet.MyServlet</servlet-class> <init-param> <param-name>p1</param-name> <param-value>v1</param-value> </init-param> <init-param> <param-name>p2</param-name> <param-value>v2</param-value> </init-param> </servlet>
二、ServletContext接口(重要)
① ServletContext是Servlet与Servlet容器之间直接通信的接口。Servlet容器在启动一个Web应用时,会为它创建一个ServletContext对象。每个Web应用都有唯一的ServletContext对象。
② 功能:1.在不同servlet之间传递数据,作用范围是整个web应用。
2.在web.xml可以配置整个web应用的初始化参数,利用ServletContext去获得。
3. 在不同servlet之间进行转发。
4.读取资源文件
三、避免并发问题
① 当多个客户同时请求访问Web应用中的同一个Servlet时,可能会导致并发问题,并发问题有两种有效的解决措施。
1.利用同步代码块解决问题。缺陷是,同一时间同步代码块只能处理一个 请求,效率很低下,所以同步代码块中尽量只包含核心的导致线程安全问题的代码。
2.为该servlet实现SingleThreadModel接口,此为一个标记接口,被标记的servlet将会在内存中保存一个servlet池,如果一个线程来了而池中没有servlet对象处理,则创建一个新的。如果池中有空闲的servlet则直接使用。这并不能真的解决线程安全问题。此接口已经被废弃。
② 两种解决方案都不够完美,所以尽量不要在servlet中出现成员变量。