当前位置: 代码迷 >> 综合 >> JavaWeb 08 ServletContext 对象
  详细解决方案

JavaWeb 08 ServletContext 对象

热度:54   发布时间:2023-11-24 13:05:16.0

4.6 多个 项目 如何 选择 运行 哪一个


在这里插入图片描述
在这里插入图片描述在这里插入图片描述
如果你想 运行 02 那么 就得把 01 删掉!
在这里插入图片描述

package com.muquanyu.servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;public class HelloServlet extends HttpServlet {
    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setContentType("text/html");resp.setCharacterEncoding("utf-8");PrintWriter writer = resp.getWriter();writer.print("我是02 的 Hello World");//super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGet(req,resp);//super.doPost(req, resp);}
}

在这里插入图片描述


4.7 ServletContext

web 容器在启动的时候,它相当于一个 中介,它会为每个 web 程序都创建 一个 对应的 Servlet 对象,它代表了当前的 web 应用。

  • 可共享数据(我在 这个 Servlet 中保存的数据,可以在另一个Servlet 中 获取到。)
    在这里插入图片描述
    上图 说明了 servletcontext 就这么一个!所以我们 无论在 哪个class 程序里 获取servletcontext 都是 那一个。而且 我们的数据 是可以 存放在这里的。并且 也能提取出来!

4.7.1 多个 servlet 程序 共享数据的实现

  • 存放数据到 servletcontext 中
package com.muquanyu.servlet;import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;public class HelloServlet extends HttpServlet {
    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setContentType("text/html");resp.setCharacterEncoding("utf-8");PrintWriter writer = resp.getWriter();writer.print("我是02 的 Hello World");ServletContext servletContext = this.getServletContext();String username = "哞哞";//将一个 字段名为 username 的 数据保存到 servlet 中,值为 "哞哞"servletContext.setAttribute("username",username);//super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGet(req,resp);//super.doPost(req, resp);}
}

我们可以 看到,哞哞 这个东西 就被 存储到 servletcontext 中了。

  • 新建一个 class 程序
package com.muquanyu.servlet;import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;public class GetServlet extends HttpServlet {
    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //拿到的 context 肯定是同一个!ServletContext servletContext = this.getServletContext();String username = (String) servletContext.getAttribute("username");resp.setContentType("text/html");resp.setCharacterEncoding("utf-8");resp.getWriter().print(username);//super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGet(req, resp);//super.doPost(req, resp);}
}

通过 获取 到 唯一的 servletcontext ,和 相应的 节点名称,就能够 获取到 这个 被存储进去的数据。

  • 测试阶段

如果 不先 运行 hello 程序,则 该数据 没有存储到 servletcontext 中,所以 get 去 获取的时候,就会获取到 null。在这里插入图片描述

如果 先 hello运行,把数据存储进去后。
在这里插入图片描述
再去 运行 getc,则 获取 数据成功!
在这里插入图片描述

  相关解决方案