宋利兴_笔记_ServletConfig和ServletContext
ServletConfig和ServletContext
Public class GenericServlet implements Servlet,ServletConfig{
Private ServletConfig conf;
Public void init(ServletConfig conf){
This.conf=conf;
}
Public ServletConfig getServletConfig(){
Return conf;
}
}
Public class HttpServlet extends GenericServlet{
}
每一个Servlet都对应有一个自己的ServletConfig对象
Web.xml
<web-app>
<servlet>servlet名字和servlet类<init-param></init-param></servlet>
<servlet-mapping>servlet名字和url模式</servlet-mapping>
<context-param>参数名和参数值</context-param>
</web-app>
ServletContext对象 一个Web应用程序有一个ServletContext对象
ServletContext对象 得到上下文参数
setAttribute()设置属性名和属性值
getAttribute(“属性名”)
servlet对象一旦创建并init()后 开启线程service()
共享资源 临界资源
HttpServletRequest接口中提供了几个方法用来操作请求实例中存储的对象:
public void setAttribute(String name, Object obj):将对象存储进HttpServletRequest实例中。
public Object getAttribute(String name):检索存储在HttpServletRequest实例中的对象。
public Enumeration getAttributeNames():返回包含HttpServletRequest实例中的所有属性名的Enumeration对象。
public void removeAttribute(String name):从HttpServletRequest实例中删除指定名称的属性。
ServletConfig
如何给Servlet类配置初始化参数
如何在Servlet类中获取它的初始化参数值
ServletContext
如何配置Web应用上下文初始化参数
如何在Servlet类中获取Web应用上下文的初始化参数值
ServletContext的其他用途
public void setAttribute(String name, Object obj):根据指定名name把对象obj存放到应用上下文范围中。
public Object getAttribute(String name):根据指定名从应用上下文范围中获取到该属性对象。
public void removeAttribut(String name):根据指定名从应用上下文范围中移除该属性。
ServletConfig和ServletContext的区别
整个Web应用只有一个ServletContext,在部署Web应用的时候,容器会建立这一个ServletContext对象,这个上下文对Web应用中的每个Servlet和JSP都可用。
Web应用中的各个Servlet都有自己的ServletConfig,它只对当前Servlet有效。
使用synchronized
使用synchronized关键字同步操作成员变量和共享数据的代码,就可以防止可能出现的线程安全问题。
尽量少使用成员变量和共享数据
ServletContext是可以多线程同时读/写成员变量和共享数据的,线程是不安全的。
ServletRequest对象在service方法的范围内是有效的,不要试图在service方法结束后仍然保存请求对象的引用。
Servlet本身就是多线程的,在Servlet中再创建线程,将导致执行情况复杂化,出现多线程安全问题