ServletContext对象
Web 应用中的所有 Servlet 共享同一个 ServletContext 对象,不同 Servlet 之间可以通过 ServletContext 对象实现数据通讯,因此 ServletContext 对象也被称为 Context 域对象。
域对象是服务器在内存上创建的存储空间,该空间用于不同动态资源(例如 Servlet、JSP)之间传递与共享数据。
获取上下文初始化参数的相关方法
String | getInitParameter(String name) | 根据初始化参数名 name,返回对应的初始化参 数值。 |
Enumeration | getInitParameterNames() | 返回 Web 应用所有上下文初始化参数名的枚举 集合,如果没有上下文初始化参数,则返回一个空的枚举集合。 |
创建ServletContext对象
1)通过 GenericServlet 提供的 getServletContext() 方法
//通过 GenericServlet的getServletContext方法获取ServletContext对象
ServletContext servletContext = this.getServletContext();
2)通过 ServletConfig 提供的 getServletContext() 方法
//通过 ServletConfig的 getServletContext方法获取ServletContext对象
ServletContext servletContext = this.getServletConfig().getServletContext();
//通过 Config的 getServletContext方法获取ServletContext对象
ServletContext context = config.getServletContext();
3)通过 HttpSession 提供的 getServletContext() 方法
//通过 Session的 getServletContext方法获取ServletContext对象
ServletContext context = req.getSession().getServletContext();
4)通过 HttpServletRequest 提供的 getServletContext() 方法
//通过 HttpServletRequest的 getServletContext方法获取ServletContext对象
ServletContext servletContext = req.getServletContext();
上下文初始化参数
局部参数
<servlet>
<init-param>
<param-name>name</param-name>
<param-value>Lungcen</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>110120130</param-value>
</init-param>
</servlet>
全局参数
<context-param>
<param-name>姓名</param-name>
<param-value>Lungcen</param-value>
</context-param>
<context-param>
<param-name>年龄</param-name>
<param-value>19</param-value>
</context-param>
获取ServletContext的全局参数
Enumeration<String> names = this.context.getInitParameterNames();
while (names.hasMoreElements())
{
String s = names.nextElement();
writer.write(s + "->" + context.getInitParameter(s) + "<br/>");
}
ServletContext 属性与上下文初始化参数对比
不 同 点 | 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);
}
}
在浏览器中的操作
总结
到此这篇关于Java Web中ServletContext对象详解与应用的文章就介绍到这了,更多相关Java Web ServletContext对象内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!