天天看点

ServletContext对象ServletContext对象

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);

}
           

继续阅读