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{
//
}
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):根据指定名从应用上下文范围中移除该属性。
每个xxxServlet都有一个ServletConfig对象,这个ServletConfig对象只对自己有效
FirstServlet ServletConfig对象
SecondServlet ServletConfig对象
<init-param>
<param-name>corporation</param-name>
<param-value>csdn</param-value>
</init-param>
初始化参数
<web-app>
<servlet>servlet名字和servlet类</servlet>
<servlet-mapping>Servlet名字和要映射成的url模式</servlet-mapping>
</web-app>
一个web应用程序有一个ServletContext对象
<context-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</context-param>
<web-app>
<servlet>servlet名字和servlet类</servlet>
<servlet-mapping>Servlet名字和要映射成的url模式</servlet-mapping>
<context-param>参数名和参数值</context-param>
</web-app>
如何获取ServletContext:[上下文对象]
ServletConfig conf=this.getServletConfig();
ServletContext context=conf.getServletContext();
String encoding=Context.getInitParameter(“encoding”);//通过上下文对象获取参数encoding的值
ServletCoonfig sc=this.getServletConfig();//获取ServletConfig的引用
在service中如下配置是设置上下文
<Context path=”/demo”docBase=”./demo”>
<Paramter name=”companyName”value=”csdn”>
</Context>
ServletContext作用域为整个程序
通过上下文对象设置属性名和属性值
setAttribute(“属性名”,”属性值”);
ServletConfig和ServletContext的区别
整个Web应用只有一个ServletContext,在部署Web应用的时候,容器会建立这一个ServletContext对象,这个上下文对Web应用中的每个Servlet和JSP都可用。
Web应用中的各个Servlet都有自己的ServletConfig,它只对当前Servlet有效。
线程安全问题
servlet对象一旦创建并init()后,开启线程servlce()
当多条线程同时启用,访问共享资源时,会出现不安全,可以加锁
不能在方法前面加锁,否则影响多线程的并发运行
//一个消息头字段对应的多次出现的值
Enumeration values=request.getHeaders(headerName);//返回的是枚举类型的对象
While(values.hasMoreElements()){
values.nextElement();
}
System.out.println(headerName+”: ”+request.getHeader(headerName));
提交请求到提供下载的servlet
String referrer=request.getHeader(“referer”);
String sitePart=http://+request.getServerName();
If(referrer!=null && referrer.startsWith(sitePart)){
//处理正当的下载请求,这里只进行示意
out.println(“dealing download…….”);
}
else{
//非法下载请求跳转到本站的下载说明页
RequestDispatcher rd==request.getRequestDispatcher(“/down.html”);
rd.forward(request,response);
}