目录
ServletContext对象
获取上下文初始化参数的相关方法
创建ServletContext对象
1)通过 GenericServlet 提供的 getServletContext() 方法
2)通过 ServletConfig 提供的 getServletContext() 方法
3)通过 HttpSession 提供的 getServletContext() 方法
4)通过 HttpServletRequest 提供的 getServletContext() 方法
上下文初始化参数
局部参数
全局参数
获取ServletContext的全局参数
ServletContext 属性与上下文初始化参数对比
实现数据通讯
数据通讯的程序实例:
在浏览器中的操作
Web 应用中的所有 Servlet 共享同一个 ServletContext 对象,不同 Servlet 之间可以通过 ServletContext 对象实现数据通讯,因此 ServletContext 对象也被称为 Context 域对象。
域对象是服务器在内存上创建的存储空间,该空间用于不同动态资源(例如 Servlet、JSP)之间传递与共享数据。
String | getInitParameter(String name) | 根据初始化参数名 name,返回对应的初始化参 数值。 |
Enumeration | getInitParameterNames() | 返回 Web 应用所有上下文初始化参数名的枚举 集合,如果没有上下文初始化参数,则返回一个空的枚举集合。 |
//通过 GenericServlet的getServletContext方法获取ServletContext对象
ServletContext servletContext = this.getServletContext();
//通过 ServletConfig的 getServletContext方法获取ServletContext对象
ServletContext servletContext = this.getServletConfig().getServletContext();
//通过 Config的 getServletContext方法获取ServletContext对象
ServletContext context = config.getServletContext();
//通过 Session的 getServletContext方法获取ServletContext对象
ServletContext context = req.getSession().getServletContext();
//通过 HttpServletRequest的 getServletContext方法获取ServletContext对象
ServletContext servletContext = req.getServletContext();
name
Lungcen
password
110120130
姓名
Lungcen
年龄
19
Enumeration names = this.context.getInitParameterNames();
while (names.hasMoreElements())
{
String s = names.nextElement();
writer.write(s + "->" + context.getInitParameter(s) + "
");
}
不 同 点 | ServletContext 的属性 | 上下文初始化参数 |
创 建 方 式 | ServletContext 的属性通过调用 ServletContext 接口的 setAttribute() 方法 创建 | 上下文初始化参数通过 web.xml 使用 元素配置 |
可 进 行 的 操 作 | ServletContext 的属性可以通过 ServletContext 接口的方法进行读取、新 增、修改、移除等操作 | 上下文初始化参数在容器启动后只能被 读取,不能进行新增、修改和移除操作 |
生 命 周 期 | ServletContext 中属性的生命周期从创建开 始,到该属性被移除(remove)或者容器关 闭结束 | 上下文初始化参数的生命周期,从容器 启动开始,到 Web 应用被卸载或容器 关闭结束 |
作 用 | 使用 ServletContext 中的属性可以实现 Servlet 之间的数据通讯 | 使用上下文初始化参数无法实现数据通讯 |
在 Servlet 中,调用 ServletContext 接口的 setAttribute() 方法可以创建一些属性,这些属性被存 放在 ServletContext 对象中。应用中所有 Servlet 都可以对这些属性进行访问和操作,通过它们可以实现应用内不同 Servlet 之间的数据通讯。
void | setAttribute(String name, Object object) | 把一个 Java 对象与一个属性名绑定,并将它作为一个属 性存放到 ServletContext 中。 参数 name 为属性名,参数 object 为属性值。 |
void | removeAttribute(String name) | 从 ServletContext 中移除属性名为 name 的属性。 |
Object | getAttribute(String name) | 根据指定的属性名 name,返回 ServletContext 中对应 的属性值。 |
package com.zpark.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(urlPatterns = "/LLL.do")
public class MyServlet04 extends HttpServlet {
@Override
public void init() throws ServletException {
getServletContext().setAttribute("count", 0);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Integer count = (Integer) getServletContext().getAttribute("count");
count++;
getServletContext().setAttribute("count", count);
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.write("欢迎来到界面" + count);
writer.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
doGet(req, resp);
}
}
package com.zpark.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/Lun5.do")
public class MyServlet05 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
Integer count = (Integer) getServletContext().getAttribute("count");
writer.write("今天是一个好日子" + count);
writer.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
doGet(req, resp);
}
}