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,则 获取 数据成功!