【Servlet】使用ServletContext进行共享数据、获取初始化参数、请求转发与读取资源文件


声明:本文是通过学习自B站的视频所写的笔记,便于今后回顾,视频地址:https://www.bilibili.com/video/BV12J411M7Sj?p=10

一、是ServletContext

Web容器在启动的时候,它会为每个Web程序都创建一个ServletContext对象,它代表了当前的Web应用

二、ServletContext的作用

1.共享数据

在这个Servlet中保存的数据,可在另一个Servlet中拿到

实例测试:

1)主要代码

用于存入Servlet上下文中数据的类:

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
//        this.getInitParameter() 初始化参数
//        this.getServletConfig() Servlet配置
//        this.getServletContext() Servlet上下文
        /**
         * Web容器在启动的时候,它会为每个Web程序都创建一个ServletContext对象,
         * 它代表了当前的Web应用
         *
         * 作用:
         * 1.共享数据:在这个Servlet中保存的数据,可在另一个Servlet中拿到
         */
        ServletContext servletContext = this.getServletContext();

        String username = "zlc";
        //将一个数据属性及值保存在了Servlet上下文中
        servletContext.setAttribute("username", username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
}

用于取出Servlet上下文中数据的类:

public class GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //在Servlet上下文(此Web应用中所有Servlet实现类都是一个Servlet上下文)中获取此属性值
        ServletContext servletContext = this.getServletContext();

        String username = (String) servletContext.getAttribute("username");

        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().print("名字:" + username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

web.xml主要内容:

<servlet>
   <servlet-name>hello</servlet-name>
   <servlet-class>com.zlc.servlet.HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>hello</servlet-name>
   <url-pattern>/h</url-pattern>
</servlet-mapping>


<servlet>
   <servlet-name>getc</servlet-name>
   <servlet-class>com.zlc.servlet.GetServlet</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>getc</servlet-name>
   <url-pattern>/g</url-pattern>
</servlet-mapping>
2)测试效果

测试直接请求/g,发现可以,但由于没有存入数据,因此为null
在这里插入图片描述
请求/h,使HelloServlet类中存入Servlet上下文中数据的部分生效

在这里插入图片描述
再次请求/g,发现可以取出数据,因此ServletContext共享数据的特性得以验证
在这里插入图片描述

2.获取初始化参数

实例测试:

1)主要代码

在web.xml中配置一些Web应用的初始化参数

<!--    配置一些Web应用的初始化参数-->
<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
</context-param>

<servlet>
    <servlet-name>param</servlet-name>
    <servlet-class>com.zlc.servlet.TestParam</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>param</servlet-name>
    <url-pattern>/p</url-pattern>
</servlet-mapping>

在TestParam类中获取之前配置的初始化参数

public class TestParam extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();

        String url = servletContext.getInitParameter("url");
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().print(url);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
2)测试效果

在这里插入图片描述

3.请求转发

实例测试:

1)主要代码

web.xml

<servlet>
    <servlet-name>rd</servlet-name>
    <servlet-class>com.zlc.servlet.TestRequestDispatch</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>rd</servlet-name>
    <url-pattern>/rd</url-pattern>
</servlet-mapping>

用于请求转发的TestRequestDispatcher类,将对于此类的映射的/rd,转发为请求/p

public class TestRequestDispatcher extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();

        //转发的请求路径
        RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/p");
        //传递请求和响应,实现请求转发
        requestDispatcher.forward(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
2)测试效果

在这里插入图片描述
在这里插入图片描述

4.读取资源文件

实例测试:

1)主要代码

resources目录下:db.properties

username=root
password=123456

在这里插入图片描述
用于读取资源文件的类:

public class TestReadSource extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");

        Properties prop = new Properties();
        prop.load(in);
        String username = prop.getProperty("username");
        String password = prop.getProperty("password");

        resp.getWriter().print(username + ":" + password);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

在这里插入图片描述
web.xml

<servlet>
    <servlet-name>rs</servlet-name>
    <servlet-class>com.zlc.servlet.TestReadSource</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>rs</servlet-name>
    <url-pattern>/rs</url-pattern>
</servlet-mapping>
2)测试效果

在这里插入图片描述
注:对于资源文件存放位置有特殊需求时,可参照本人之前文章进行相应配置:Maven中特殊需求下:自选目录(非resources目录)中配置文件资源导出问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

超周到的程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值