ServletContext
Servlet 上下文
每个web工程都只有一个ServletContext对象,也就是不管在哪个servlet里面,获取到的这个ServletContext对象都是同一个
web.xml
<servlet> <servlet-name>hello2</servlet-name> <servlet-class>com.qf.servlet.HelloServlet2</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello2</servlet-name> <url-pattern>/h2</url-pattern> </servlet-mapping> <servlet> <servlet-name>hello</servlet-name> <servlet-class>com.qf.servlet.HelloServlet3</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/h3</url-pattern> </servlet-mapping>
servlet类
public class HelloServlet2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("helloServlet2:"+getServletContext()); } } ------------------------------------------------------------- public class HelloServlet3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("helloServlet3:"+getServletContext()); //testServletConfig(); } }
浏览器先后访问url(http://localhost:8080/HelloServlet/h2、http://localhost:8080/HelloServlet/h3),查看console输出
helloServlet2:org.apache.catalina.core.ApplicationContextFacade@4b020c18 helloServlet3:org.apache.catalina.core.ApplicationContextFacade@4b020c18
所以两个servlet获取的是同一个ServletContext对象
ServletContext对象的获取
ServletContext context = getServletContext();
ServletContext的作用
获取全局配置参数
web.xml配置
<context-param> <param-name>name</param-name> <param-value>wxf</param-value> </context-param> <context-param> <param-name>age</param-name> <param-value>21</param-value> </context-param>
servlet代码
1 public class HelloServlet2 extends HttpServlet { 2 3 @Override 4 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 5 ServletContext context = getServletContext(); 6 Enumeration<String> names = context.getInitParameterNames(); 7 while (names.hasMoreElements()) { 8 String name = (String) names.nextElement(); 9 System.out.println(name+"==="+context.getInitParameter(name)); 10 } 11 } 12 }
console输出
name===wxf age===21
获取web工程中的资源(webContent目录下的资源)
config.properties
name=zhangsan age=123
servlet类
1 public class HelloServlet2 extends HttpServlet { 2 3 @Override 4 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 5 ServletContext context = getServletContext(); 6 7 //1.获取资源所在的绝对路径位置 8 //这里得到的是项目在tomcat里面的根目录 9 String path = context.getRealPath(""); 10 System.out.println("path==="+path); 11 //这里得到的是项目在tomcat里面的根目录 12 String path2 = context.getRealPath("config.properties"); 13 System.out.println("path2==="+path2); 14 System.out.println("-------------------------"); 15 16 //2.getResourceAsStream 获取资源 流对象 相对路径 17 InputStream stream = context.getResourceAsStream("config.properties"); 18 Properties prop = new Properties(); 19 prop.load(stream); 20 String name = prop.getProperty("name"); 21 System.out.println("name==="+name); 22 } 23 }
console输出
path===F:eclipseworkspacedevelop_study.metadata.pluginsorg.eclipse.wst.server.core mp0wtpwebappsHelloServlet path2===F:eclipseworkspacedevelop_study.metadata.pluginsorg.eclipse.wst.server.core mp0wtpwebappsHelloServletconfig.properties ------------------------- name===zhangsan
注:
存取数据,servlet间共享数据 域对象
ServletContext context = getServletContext(); context.setAttribute("name", "qf"); System.out.println("name==="+context.getAttribute("name"));
console输出
name===qf