ServletContext和ServletConfig

1、ServletContext

ServletContext 官 方 叫 Servlet 上 下 文 。 服 务 器 会 为 每 一 个 Web 应 用 创 建 一 个ServletContext 对象。这个对象全局唯一,而且 Web 应用中的所有 Servlet 都共享这个对象。所以叫全局应用程序共享对象。
在这里插入图片描述

1.1、ServletContext 对象的作用

1.1.1、相对路径转绝对路径

文件下载:

public class DownFileServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext servletContext = this.getServletContext();
        //路径转换
        String realPath = servletContext.getRealPath("/test.jpg");
        System.out.println(realPath);
        //读文件
        File file = new File(realPath);
        System.out.println(file);
        FileInputStream fis = new FileInputStream(file);
        byte[] buff = new byte[fis.available()];
        fis.read(buff);
        //在响应中添加附加信息
        resp.addHeader("Content-Disposition","attachment;filename="+new String(file.getName().getBytes("gbk"),"iso-8859-1"));
        OutputStream os = resp.getOutputStream();
        os.write(buff);
        os.flush();
        os.close();
    }
}

1.1.2、获取容器的附加信息

1.1.3、读取配置信息

在这里插入图片描述

<context-param>
        <param-name>math</param-name>
        <param-value>145</param-value>
    </context-param>
    <context-param>
        <param-name>english</param-name>
        <param-value>90</param-value>
    </context-param>
/**
 * ServletContext对象读取web.xml文件中的信息
 */
public class ContextReadInfoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext
        ServletContext servletContext = this.getServletContext();
        Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
        PrintWriter out = resp.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
        out.println("<HTML>");
        out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");
        out.println("<BODY>");
        while(initParameterNames.hasMoreElements()){
            String name = initParameterNames.nextElement();
            out.println("Name:"+name+" Value: "+servletContext.getInitParameter(name));
        }
        out.println("</BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }
}

1.1.4、全局容器

2、Servletconfig

ServletConfig 对象对应 web.xml 文件中的<servlet>节点。当 Tomcat 初始化一个 Servlet时,会将该 Servlet 的配置信息,封装到一个 ServletConfig 对象中。我们可以通过该对象读取<servlet>节点中的配置信息

servletConfig.getInitParameter("key");
//该方法可以读取 web.xml 文件中<servlet>标签中<init-param>标签中的配置信息。
servletConfig.getInitParameterNames();
//该方法可以读取 web.xml 文件中当前<servlet>标签中所有<init-param>标签中的值。
  • 获取web中的配置信息:
<servlet>
        <servlet-name>GetConfigInfoServlet</servlet-name>
        <servlet-class>com.pan.GetConfigInfoServlet</servlet-class>
        <init-param>
            <param-name>key1</param-name>
            <param-value>pan</param-value>
        </init-param>
        <init-param>
            <param-name>key2</param-name>
            <param-value>hai</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>GetConfigInfoServlet</servlet-name>
        <url-pattern>/config.do</url-pattern>
    </servlet-mapping>
/**
 * 通过ServletConfig对象读取配置信息
 */
public class GetConfigInfoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //获取ServletConfig对象
        ServletConfig servletConfig = this.getServletConfig();
        Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
        PrintWriter out = resp.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
        out.println("<HTML>");
        out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");
        out.println("<BODY>");
        while(initParameterNames.hasMoreElements()){
            String key = initParameterNames.nextElement();
            out.println("Key: "+key+" Value: "+servletConfig.getInitParameter(key)+"<br/>");
        }
        out.println("</BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }
}

输出:
在这里插入图片描述

  • ServletConfig读<servlet>下的<nit-param>标签,而ServletContext读取的是<web-app>下的<context-param>标签
  • 任何Servlet都可以读取ServletContext中的信息,而ServletConfig只能读取相应的Servlet中的信息。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pk5515

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值