ServletContext与ServletConfig

ServletContext

1、什么是ServletContext?

  当Web容器(Tomcat)启动,且Web应用加载完成后,Web容器立即为该Web应用创建一个的ServletContext对象代表当前Web应用。每一个Web应用都有且仅有一个ServletContext对象,又称Application对象,从名称中可知,该对象是与应用程序相关的。该ServletContext对象直到Web容器关闭或Web应用移除出容器时,随Web应用的销毁而销毁。

2、ServletContext的获取方式:
  1. 通过ServletrRequest对象中定义的getServletContext()方法获取:
      request对象.getServletContext();
  2. 通过GenericServlet类中定义的的getServletContext()方法获取(即:GenericServlet或其子类,都有该方法,直接调用即可):
      this.getServletContext()
      super.getServletContext()
  3. 通过ServletConfig接口中定义的getServletContext()方法获取:
      ServletConfig对象.getServletContext();
3、 ServletContext的作用:
  1. 获取MIME类型:
      什么是MIME类型?
        在互联网通信过程中定义的一种文件数据类型
          格式:大类型/小类型 text/html image/jpg
          获取:String getMimeType(String file)
          案例:
            ServletContext servletContext = req.getServletContext();
            System.out.println(servletContext.getMimeType("/hello.txt")); // text/plain

  2. 作为域对象,进行数据共享
      1)setAttribute(String name,Object value)
      2)getAttribute(String name)
      3)getAttributeNames():返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的属性名。
      4)removeAttribute(String name)
      5)ServletContext对象范围:当前Web应用

  3. 访问当前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):取得转发对象;

  4. 访问服务器端的文件系统资源
      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定义如下:


<servlet>
	<servlet-name>loginservlet-name>
	<servlet-class>web.LoginServletservlet-class>
   	
    <init-param>
     		<param-name>maxOnlineparam-name>
     		<param-value>3000param-value>
   	init-param>
servlet>

<servlet-mapping>
    <servlet-name>loginservlet-name>
    <url-pattern>/loginurl-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);
	}
}

你可能感兴趣的:(Servlet与JSP)