ServletContext(Application)

ServletContext(Application),代表整个应用

一个项目只有一个ServletContext对象,可以在N个Servlet中来获取这个唯一的对象,使用它可以给Servlet传递数据。

ServletContext在服务器启动时创建,在服务器关闭时销毁,一个JavaWeb只创建一个ServletContext对象。

ServletContext的功能就是获取全局配置信息、多个Servlet之间共享数据、获取资源路径。

获取ServletContext

  • Servlet#getServletConfig#getServletContext();
  • ServletConfig#getServletContext();
  • HttpSession#getServletContext();
  • ServletContextEvent#getServletContext();

在Servlet中获取ServletContext对象:

在void init(ServletConfig config)中:ServletContext context=config.getServletContext();

在GenericServlet中获取ServletContext对象:

在GenericServlet类中有getServletContext()方法,可以直接使用this.getServletContext()来获取。

在HttpServlet中获取ServletContext对象:

    ServletContext sc=this.getServletContext();

    ServletContext sc1=this.getServletConfig().getServletContext();

域对象的功能

ServletContext是JavaWeb四大域对象之一。域对象可以用来在多个Servlet中传递数据。

PageContext、ServletRequest、HttpSession和ServletContext

所有域对象都有存取数据的功能,因为域对象内部是一个Map,用来存储数据。

常用方法

  • void setAttribute(String name,Object object):用来存储一个对象,也称为存储一个域属性。
  • Object getAttribute(String name):用来获取ServletContext中的数据。
  • void removeAttribute(String name):用来移除ServletContext中的域属性,如果参数name指定的域属性不存在,什么也不做。
  • Enumeration getAttributeNames():获取所有域属性的名称。
  • boolean setInitParameter(String name,String value):设置初始化参数,如果参数名存在,设置失败。
  • ServletContext getContext(String uripath):返回映射到另一URL的servlet上下文。在同一服务器中URL必须是以“/”开头的绝对路径。   
  • String getContextPath():获取当前的项目根目录路径,也可以理解为项目名。      
  • String getInitParameter(String name):根据参数名来获取应用的初始化参数。
  • Enumeration<String> getInitParameterNames():获取应用的的初始化参数集合。
  • String getRealPath(String path):根据资源路径得到资源的绝对路径。
  • RequestDispatcher getRequestDispatcher(String path):根据路径将指定的资源包装成RequestDispatcher实例并返回。
  • URL getResource(String path):返回指定路径的URL实例。
  • InputStream getResourceAsStream(String path):获取资源的输入流。
  • Set<String> getResourcePaths(String path):获取指定目录下的所有资源路径。必须以"/"开头。
  • String getServerInfo():返回Servlet容器的名称和版本,格式为servername/versionnumber.
  • String getServletContextName():返回应用的名称,这里的名称是web.xml里面配置的display-name,如果没有配置,则返回null。
  • void log(String msg):log方法都是记录日志到servlet日志文件,servlet日志文件的路径由具体的servlet容器去决定,如果你是在MyEclipse、STS这类的IDE中跑应用的话,那么日志信息将在控制台(Console)输出。如果是发布到Tomcat下的话,日志文件是Tomcat目录下的/logs/localhost.yyyy-MM-dd.log。

获取初始化参数

<context-param>

    <param-name>param1</param-name>

    <param-value>paramv1</param-value>

</context-param>

ServletContext sc=this.getServletContext();

String name =sc.getInitParameter("param1");

PrintWriter out = response.getWriter();

out.println(name);    

  

获取资源相关方法

⑴获取真实路径

可以使用ServletConfig对象来获取Web应用下的资源。

如获取hello应用的根目录下创建a.txt文件,在Servlet中获取这个资源,可以使用ServletContext来获取。

  • 获取a.txt的真实路径:String realPath=servletContext.getRealPath("/a.txt"),realPath的值为a.txt文件的真实路径:
  • 获取b.txt的真实路径:String realPath=servletContext.getRealPath("/WEB-INF/a.txt"),以“/”开头,当前应用根目录。

⑵获取资源流

可以通过ServletContext获取资源流,即把资源以输入流的方式获取:

  • 获取a.txt资源流:InputStream in=servletContext.getResourceAsStream("/a.txt");
  • 获取b.txt资源流:InputStream in=servletContext.getResourceAsStream("/WEB-INF/b.txt");

⑶获取指定目录下所有资源路径

可以使用ServletContext获取指定目录下的所有资源路径,例如获取/WEB-INF下所有资源的路径:

Set set=context.getResourcePaths("/WEB-INF");

获取类路径下资源

获取类路径资源,类路径对一个JavaWeb项目而言,就是/WEB-INF/classes和/WEB-INF/lib/每个jar包。

InputStream in=this.getClass().getResourceAsStream("/xxx.txt");获取的是/WEB-INF/classes/xxx.txt,即类路径的根目录下的资源,类路径的根目录就是/classes目录。

System.out.println(IOUtils.toString(in));

InputStream in=this.getClassLoader().getResourceAsStream("xx.txt");

System.out.println(IOUtils.toString());获取的是当前Servlet同目录下的资源。

⑴Class类的getResouceAsStream(String path):

  • 路径以"/"开头,相对classes路径。
  • 路径不以""开头,相对当前class文件所有路径,例如在cn.yzgarden.servlet.MyServlet中执行,那么相对/classes/cn/yzgarden/servlet/目录。

⑵ClassLoader类的getResourceAsStream(String path):相对classes路径。

先得到Class,再得到ClassLoader:

ClassLoader cl=this.getClass().getClassLoader();

InputStream input=cl.getResourceAsStream(""); 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值