目录
一、ServletContext对象是什么?
ServletContext是javax.servlet包下的一个接口,又称为上下文对象,是配置对象也是一个域对象;当服务器启动时候,会为服务器中的每一个web应用程序创建一个ServletContext对象;在web应用中的servlet想要实现资源共享,可以通过ServletContext来完成。
二、如何获取ServletContext对象
public ServletContext getServletContext(){
// 获取ServletContext对象
return this.getServletConfig().getServletContext();
}
三、ServletContext对象常见的方法
getInitParameter() //获取指定参数名称的全局参数值
getRealPath(String path) //获得当前项目的服务器磁盘路径
getContextPath() //获取项目的根路径
getAttribute(String parameterName) //获取ServletContext域中指定名称的参数值;
setAttribute(String paramterName,Object parameterValue) //存储参数到ServletContext域中;
removeAttribute(String parameterNam) //将ServletContext域中指定名称的参数移除;
四、需求
获取Servlet里定义的参数
(1)web.xml 文件
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>root456</param-value>
</context-param>
(2)servlet
①ServletContextServlet
/*
* Copyright (c) 2020, 2023, webrx.cn All rights reserved.
*
*/
package com.by.servlet2;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ServletContextServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. 获取ServletContext对象(super可以省略)
ServletContext servletContext = super.getServletContext();
// 2. 获取全局初始化参数
String username = servletContext.getInitParameter("username");
String password = servletContext.getInitParameter("password");
System.out.println(username);
System.out.println(password);
// 3.获取服务器的真是路径
String realPath = servletContext.getRealPath("");
System.out.println("真实路径"+realPath);
// 4.获取项目的跟路径
String contextPath = servletContext.getContextPath();
System.out.println("项目的根路径:"+contextPath);
// 5. 往ServletContext域中,存储一个名称为msg的属性,值为”hello"
String str="hello";
servletContext.setAttribute("msg",str);
}
}
②ServletContextServlet2
/*
* Copyright (c) 2020, 2023, webrx.cn All rights reserved.
*
*/
package com.by.servlet2;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ServletContextServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = super.getServletContext();
// 1.获取全局的param参数
String username = servletContext.getInitParameter("username");
String password = servletContext.getInitParameter("password");
System.out.println(username+password);
String msg = (String) servletContext.getAttribute("msg");
System.out.println(msg);
}
}
③ServletContextServlet3
/*
* Copyright (c) 2020, 2023, webrx.cn All rights reserved.
*
*/
package com.by.servlet2;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ServletContextServlet3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. 获取ServletContext对象
ServletContext servletContext = super.getServletContext();
// 2. 将servletContext域中的msg删除
servletContext.removeAttribute("msg");
}
}
(3)三个servlet的配置文件
<!-- 定义三个servletContext的servlet-->
<servlet>
<servlet-name>servletContextServlet</servlet-name>
<servlet-class>com.by.servlet2.ServletContextServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletContextServlet</servlet-name>
<url-pattern>/servletContextServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servletContextServlet2</servlet-name>
<servlet-class>com.by.servlet2.ServletContextServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletContextServlet2</servlet-name>
<url-pattern>/servletContextServlet2</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servletContextServlet3</servlet-name>
<servlet-class>com.by.servlet2.ServletContextServlet3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletContextServlet3</servlet-name>
<url-pattern>/servletContextServlet3</url-pattern>
</servlet-mapping>
(4)测试
第一个前两个servlet是接收servletcontext设置的全局参数,第三个是清空将servletContext域中的msg信息,清空之后再次访问第二个servlet 就接收不了msg信息了。
①首先访问第一个servlet
②访问第二个servlet
③访问第三个servlet 将ServletContext域中的信息删除,然后再访问第二个servlet