ServletContext
1、什么是ServletContext?
当Web容器(Tomcat)启动,且Web应用加载完成后,Web容器立即为该Web应用创建一个的ServletContext对象代表当前Web应用。每一个Web应用都有且仅有一个ServletContext对象,又称Application对象,从名称中可知,该对象是与应用程序相关的。该ServletContext对象直到Web容器关闭或Web应用移除出容器时,随Web应用的销毁而销毁。
2、ServletContext的获取方式:
- 通过ServletrRequest对象中定义的getServletContext()方法获取:
request对象.getServletContext(); - 通过GenericServlet类中定义的的getServletContext()方法获取(即:GenericServlet或其子类,都有该方法,直接调用即可):
this.getServletContext()
super.getServletContext() - 通过ServletConfig接口中定义的getServletContext()方法获取:
ServletConfig对象.getServletContext();
3、 ServletContext的作用:
-
获取MIME类型:
什么是MIME类型?
在互联网通信过程中定义的一种文件数据类型
格式:大类型/小类型 text/html image/jpg
获取:String getMimeType(String file)
案例:
ServletContext servletContext = req.getServletContext();
System.out.println(servletContext.getMimeType("/hello.txt")); // text/plain -
作为域对象,进行数据共享
1)setAttribute(String name,Object value)
2)getAttribute(String name)
3)getAttributeNames():返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的属性名。
4)removeAttribute(String name)
5)ServletContext对象范围:当前Web应用 -
访问当前WebApp(Web应用)的资源
1)String getContextPath():取得当前Web应用的虚拟目录;
2)String getInitParameter(String name):取得WebApp配置文件中匹配的初始化参数值。在web.xml的web-app元素中的context-param子元素表示WebApp应用范围内的初始参数;
3)String getInitParameterNames():返回一个Enumeration对象,该对象包含了所有存放在web.xml中web-app元素中的context-param子元素的初始化参数名;
3)RequestDispatcher getRequestDispatcher(String path):取得转发对象; -
访问服务器端的文件系统资源
String getRealPath(String path):根据参数指定的虚拟路径,返回文件系统中的一个真实的路径
//D:\Scott\WorkSpcace\IDEAWorkSpace\out\artifacts\MyDemo_war_exploded\WEB-INF/classes/a.txt
String a = context.getRealPath("/WEB-INF/classes/a.txt"); //src目录下的资源访问
//D:\Scott\WorkSpcace\IDEAWorkSpace\out\artifacts\MyDemo_war_exploded\b.txt
String b = context.getRealPath("/b.txt"); //web目录下资源访问,例如
//D:\Scott\WorkSpcace\IDEAWorkSpace\out\artifacts\MyDemo_war_exploded\WEB-INF\c.txt
String c = context.getRealPath("/WEB-INF/c.txt"); //WEB-INF目录下的资源访问
ServletConfig详解
1、什么是ServletConfig对象?
Servlet/Jsp容器创建一个Servlet类型的对象时,会为这个Servlet对象创建一个唯一的ServletConfig对象。在ServletConfig对象中包含了Servlet的初始化参数信息。在Servlet的配置文件中,可以用一个或多个init-param标签为Servlet配置一些初始化参数。当Servlet配置了初始化参数之后,Web容器在创建Servlet实例对象时,会自动将这些初始化参数封装到这个Servlet对象对应的ServletConfig对象中,并在调用Servlet的init()方法时,将ServletConfig对象传递给Servlet。进而,程序员通过ServletConfig对象得到当前Servlet的初始化参数信息。
2、ServletConfig的常用方法
1)Enumeration getInitParameterNames():取得标签中配置的所有参数的参数名
2)String getInitParameter(String name):根据参数名取得参数值
3)ServletContext getServletContext():取得ServletContext对象
4)String getServletName():取得当前Servlet的名称
3、ServletConfig获取web.xml文件中为Servlet配置的初始化参数案例
web.xml定义如下:
<!-- LoginServlet案例(ServletConfig) -->
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>web.LoginServlet</servlet-class>
<!-- 给此Servlet预置参数 -->
<init-param>
<param-name>maxOnline</param-name>
<param-value>3000</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
模拟:在配置文件中定义网站的最大同时在线人数,并通过ServletConfig对象取得该值
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
//在web.xml中配置登陆时允许的最大同时在线人数,通过ServletConfig对象取得该值
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//getServletConfig()方法返回的是Tomcat创建出来的那个ServletConfig对象
ServletConfig config = this.getServletConfig().getInitParameter("maxOnline");
System.out.println(maxOnline);
}
}