//通过 GenericServlet的getServletContext方法获取ServletContext对象 ServletContext servletContext = this.getServletContext();
//通过 ServletConfig的 getServletContext方法获取ServletContext对象 ServletContext servletContext = this.getServletConfig().getServletContext();
//通过 HttpSession的 getServletContext方法获取ServletContext对象 ServletContext servletContext = req.getSession().getServletContext();
//通过 HttpServletRequest的 getServletContext方法获取ServletContext对象 ServletContext servletContext = req.getServletContext();
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="false"> <!--设置全局初始化参数 --> <context-param> <param-name>name</param-name> <param-value>编程帮</param-value> </context-param> <context-param> <param-name>url</param-name> <param-value>www.lmcjl.com</param-value> </context-param> </web-app>对以上标签说明如下:
返回值类型 | 方法 | 描述 |
---|---|---|
String | getInitParameter(String name) | 根据初始化参数名 name,返回对应的初始化参数值。 |
Enumeration<String> | getInitParameterNames() | 返回 Web 应用所有上下文初始化参数名的枚举集合,如果该 Web 应用没有上下文初始化参数,则返回一个空的枚举集合。 |
package net.biancheng.www; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/ReadContextServlet") public class ReadContextServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter writer = response.getWriter(); // 调用httpServlet父类GenericServlet的getServletContext方法获取ServletContext对象 ServletContext context = super.getServletContext(); // 返回 context 上下文初始化参数的名称 Enumeration<String> initParameterNames = context.getInitParameterNames(); while (initParameterNames.hasMoreElements()) { // 获取初始化参数名称 String initParamName = initParameterNames.nextElement(); // 获取相应的初始参数的值 String initParamValue = context.getInitParameter(initParamName); // 向页面输出 writer.write(initParamName + " : " + initParamValue + "<br/>"); } // 关闭流 writer.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
返回值类型 | 方法 | 描述 |
---|---|---|
void | setAttribute(String name, Object object) |
把一个 Java 对象与一个属性名绑定,并将它作为一个属性存放到 ServletContext 中。 参数 name 为属性名,参数 object 为属性值。 |
void | removeAttribute(String name) | 从 ServletContext 中移除属性名为 name 的属性。 |
Object | getAttribute(String name) | 根据指定的属性名 name,返回 ServletContext 中对应的属性值。 |
不同点 | ServletContext 的属性 | 上下文初始化参数 |
---|---|---|
创建方式 | ServletContext 的属性通过调用 ServletContext 接口的 setAttribute() 方法创建 | 上下文初始化参数通过 web.xml 使用 <context-param> 元素配置 |
可进行的操作 | ServletContext 的属性可以通过 ServletContext 接口的方法进行读取、新增、修改、移除等操作 | 上下文初始化参数在容器启动后只能被读取,不能进行新增、修改和移除操作 |
生命周期 | ServletContext 中属性的生命周期从创建开始,到该属性被移除(remove)或者容器关闭结束 | 上下文初始化参数的生命周期,从容器启动开始,到 Web 应用被卸载或容器关闭结束 |
作用 | 使用 ServletContext 中的属性可以实现 Servlet 之间的数据通讯 | 使用上下文初始化参数无法实现数据通讯 |
package net.biancheng.www; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * @author 编程帮 www.lmcjl.com * 使用ServletContext 统计访问次数 * */ @WebServlet("/CountServlet") public class CountServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void init() throws ServletException { // 获取ServletContext对象 ServletContext context = getServletContext(); // 初始化时,向ServletContext中设置count属性,初始值为0 context.setAttribute("count", 0); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 调用httpServlet父类GenericServlet的getServletContext方法获取ServletContext对象 ServletContext context = super.getServletContext(); // 获取count的值,自增 Integer count = (Integer) context.getAttribute("count"); // 存入到域对象中 context.setAttribute("count", ++count); // 向页面输出内容 response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("<h3>编程帮 www.lmcjl.com 欢迎您</h3>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
package net.biancheng.www; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * @author 编程帮 www.lmcjl.com * 使用ServletContext展示网站的访问次数 * */ @WebServlet("/ShowServlet") public class ShowServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取ServletContext中存放的count属性(即页面的访问次数) Integer count = (Integer) getServletContext().getAttribute("count"); // 向页面输出 response.setContentType("text/html;charset=UTF-8"); // 若CountServlet已被访问 if (count != null) { response.getWriter().write("<h3>该网站一共被访问了" + count + "次</h3>"); } else { // 若CountServlet未被访问,提示先访问CountServlet response.getWriter().write("<h3>请先访问 CountServlet</h3>"); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
返回值类型 | 方法 | 方法描述 |
---|---|---|
Set | getResourcePaths(String path) | 返回一个 Set 集合,该集合中包含资源目录中的子目录和文件的名称。 |
String | getRealPath(String path) | 返回资源文件的真实路径(文件的绝对路径)。 |
URL | getResource(String path) | 返回映射到资源文件的 URL 对象。 |
InputStream | getResourceAsStream(String path) | 返回映射到资源文件的 InputStream 输入流对象。 |
/
开始,/
表示当前 Web 应用的根目录。
name=编程帮 url=www.lmcjl.com desc=编程帮,欢迎你
package net.biancheng.www; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * @author 编程帮 www.lmcjl.com * 使用ServletContext肚读取资源文件 * */ @WebServlet("/ReadServlet") public class ReadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter writer = response.getWriter(); // 获取相对路径中的输入流对象 InputStream ins = getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); // 获取输入流 Properties pro = new Properties(); // 加载 pro.load(ins); // 获取文件中的内容 String name = pro.getProperty("name"); String url = pro.getProperty("url"); String desc = pro.getProperty("desc"); writer.write("用户名:" + name + "<br/>" + "地址:" + url + "<br/>" + "描述:" + desc + "<br/>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
本文链接:http://task.lmcjl.com/news/13489.html