ServletContext对象
tomcat服务器启动的时候默认会为每个工程项目创建一个全局共享的对象ServletContext,
也就是ServletContext代表一个工程项目全局共享对象。
每一个工程项目都有一个唯一的实例对象ServletContext.工程上下文对象。
作用
获取当前项目的工程名字(与request功能一样)
getServletContext().getContextPath()
可以查找当前工程内部的资源文件
String path = getServletContext().getRealPath("/img/2.jpg");
也是一个域对象
ServletContext是一个容器(域对象)可以存储键值对数据(String key,Object value)
可以获取全局的配置参数
获取当前工程项目名称
getServletContext(); 获取当前工程项目ServletContext对象
格式:getServletContext();
注意:getServletContext()方法是当前的servlet对象调用,
表示为
this.getServletContext();
this关键词可以省略不写,即是调用该方法获取对象可以表示为:getServletContext().
getContextPath(); 获取当前工程项目名称
格式:ServletContext对象.getContextPath();
getContextPath()方法作用:
//在实际开发中,这样直接写死资源目录是不好的,以后项目上线了一般都会修改工程项目的名字的
//response.sendRedirect("/work/1.html");
//动态获取当前项目名字就可以了
response.sendRedirect(getServletContext().getContextPath()+"/1.html");
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取当前工程名字
System.out.println(getServletContext().getContextPath());
//这样直接写死资源目录是不好的,以后项目上线了一般都会修改项目的名字的
//response.sendRedirect("/work/1.html");
//动态获取当前项目名字就可以了
//这个作用主要用于重定向页面跳转获取当前工程名字
response.sendRedirect(getServletContext().getContextPath()+"/1.html");
}
可以查找当前项目内的资源文件
getRealPath("相对路径");
获取文件相对路径的绝对路径,相当于输入文件的相对路径来获取该文件的绝对路径.
格式: ServletContext对象.getReaPath(“相对路径”);
getResourceAsStream("相对路径"); 获取相对路径的文件流
格式:ServletContext对象.getResourceAsStream("相对路径");
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//需求:向客户端输出一个图片
//servletContext有能力直接查找当前项目下的资源文件
//其实就是获取当前项目下资源路径
//获取当前项目下资源文件的绝对路径,根据servletContext对象将相对路径转换为绝对路径
String path = getServletContext().getRealPath("/img/2.jpg");
System.out.println(path);
//使用servletContext可以直接获取当前项目下的资源文件流
//FileInputStream fileInputStream = new FileInputStream(path);
InputStream fileInputStream = getServletContext().getResourceAsStream("/img/2.jpg");
byte[] bytes = new byte[];
int length =-;
while((length = fileInputStream.read(bytes))!=-){
//向浏览器输出文件
response.getOutputStream().write(bytes,,length);
}
}
ervlet是一个域对象
全局只有一个当前工程的ServletContext对象,
存储的数据在当前工程内部共享。
当服务器启动的时候被创建,当前服务器正常关闭或重启的时候才销毁。
servletContext里面存储的数据在当前项目下的所有servelt都可以共享
获取ServletContext对象方法:getServletContext();
setAttribute(name,object); 可以存储自定义name的任意类型数据
格式:ServletContext对象.setAttribute(name,object);
例:getServletContext().setAttribute(name,object);
getAttribute(name) 根据name值获取对应的数据
格式:ServletContext对象.getAttribute(name);
List<String> list = new ArrayList<String>();
list.add("aa");
list.add("bb");
list.add("cc");
//将数据存储到ServletContext中
getServletContext().setAttribute("emplist", list);
//获取数据
Object object = getServletContext().getAttribute("emplist");
if(object!=null){
List<String> list = (List<String>) object;
for (String string : list) {
response.getWriter().write(string);
}
}
获取全局配置参数
web.xml
<context-param>
<param-name>dbuser</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>dbuserpwd</param-name>
<param-value>123</param-value>
</context-param>
//使用ServletContext获取web.xml中全局配置参数
//getServletContext().getInitParameter(name);
//getServletContext().getInitParameterNames();
Enumeration<String> enumeration = getServletContext().getInitParameterNames();
while (enumeration.hasMoreElements()) {
String paramName = enumeration.nextElement();
String paramValue = getServletContext().getInitParameter(paramName);
System.out.println(paramName+":"+paramValue);
}