ServletContext类
什么是ServletContext?
1、ServletContext是一个接口,表示Servlet上下文对象
2、一个web工程只能有一个ServletContext对象实例
3、ServletContext对象是一个域对象
那么,什么是域对象呢?
答曰:可以像Map一样存取数据的对象,就叫做域对象。其中,域指的是存取数据的操作范围。
对象 | 存 | 取 | 删 |
---|---|---|---|
Map | put() | get() | remove() |
域对象 | setAttribute() | getAttribute() | removeAttribute() |
有啥用,怎么用
ServletContext类有四个作用:
1、获取web.xml中配置的上下文参数context-param
2、获取当前的工程路径,格式:/工程路径
3、获取工程部署后在服务器硬盘上的绝对路径
4、像Map一样存取数据
好了,实例来了:
前三个作用实例整合
首先,新建一个Java类继承HttpServlet
然后,在web.xml设置其为一个Servlet模块,并给其添加<context-param>标签。
<!--上下文参数,属于整个web工程(一般写在所有的Servlet前面,比较好看)-->
<context-param>
<param-name>skill</param-name>
<param-value>anything</param-value>
</context-param>
Servlet的设置其实应该都会了,但还是写一下:
<servlet>
<servlet-name>MyServletContexy</servlet-name>
<servlet-class>edu.MyServletContext</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServletContexy</servlet-name>
<url-pattern>/servletContext</url-pattern>
</servlet-mapping>
该有的都有了,那么怎么获取呢?不急,接着往下看,在刚才新建的Java类中这么写:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*获取web.xml中配置的上下文参数context-param*/
ServletContext servletContext = getServletContext();
String skill = servletContext.getInitParameter("skill");
System.out.println(skill);
}
然后修改新建一个html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>MyServletContext响应界面</h1>
<form action="http://localhost:8080/servletDemo/servletContext" method="get">
<button>提交GET请求</button>
</form>
<br>
<form action="http://localhost:8080/servletDemo/servletContext" method="post">
<button>提交POST请求</button>
</form>
</body>
</html>
进入后,点击提交GET请求按钮,控制台输出信息:
类似的,使用方法getContextPath可以获取当前的工程路径,使用getRealPath("/")可以获取部署在硬盘上的绝对路径
第四个作用实例:像Map一样存取数据
看一下这个应该就足够懂了。
说个知识点就是:setAttribute后可以不断用getAttribute获取数据,直到整个工程被销毁。其实这个东西有点像全局变量就是了,就是等整个项目都被关了,全局变量才会被释放内存嘛,就是这个意思。