什么是ServletContext
- ServletContext是一个接口,它表示Servlet上下文对象
一个工程或者一个模块只会有一个ServletContext对象实例,即意思是无论我们获取到多少个ServletContext对象其实就是一个对象,只是名字可能不一样,如图:可以看到,我们打印这两个类中的各自获取到的ServletContext对象得到的地址是一样的
- ServletContext是一个域对象
什么是域对象?
域对象是可以像Map一样存储数据的对象,叫域对象
这里的域指的是存储数据的操作范围,即整个web工程
来介绍一下Map和域对象存取删除数据的方法:
Map:
存数据:put()
取数据:get()
删除数据:remove()
域对象:
存数据:setAttribute()
取数据:getAttribute()
删除数据:removeAttribute()
ServletContext作用
有四个常见作用:
获取web.xml中配置的上下文参数context.param
获取当前的工程路径,格式:/工程名
获取工程路径部署后在服务器磁盘上的绝对路径
像Map一样存取数据
获取web.xml中配置的上下文参数context.param
步骤:
得到ServletContext对象
getInitParameter()得到值
我们用IDEA工具来重新生成一个类,然后我们配置一个上下文参数即context-param
上下文参数即:属于整个工程的参数,所有的Servlet都可以得到这些参数,是大家共用的,也可以配置多组
- 通过ServletConfig对象获得ServletContext对象
如下:先getServletConfig()
方法获取到ServletConfig对象,然后再用ServletConfig对象.getServletContext()
方法获得ServletContext对象
其实我们还有一中更简单获取ServletContext对象的方法,直接ServletContext servletContext = getServletContext();
,因为这个getServletContext()方法返回的就是ServletContext对象
- 通过ServletContext对象的
getInitParameter()
方法获取到我们的上下文参数值,括号中传入参数名
获取当前的工程路径
可以通过ServletContext对象的getContextPath()
方法获取到当前的工程路径(一般就是我们设置的工程或者模块名),当然我这样说是不严谨的,然后打印的格式是/工程或者模块名
获取工程路径部署后在服务器磁盘上的绝对路径
我们可以通过ServletContext对象的getRealPath方法来获得我们工程部署后的绝对路径
注意这里是部署后的工程,在服务器上面的路径。
什么是工程部署后的路径?
我们整个所有代码进行编译形成对应的文件,这个过程叫做工程的部署,然后,这些文件放的位置就是工程部署后的路径,这个路径中的文件和我们本来的文件是一一对应的
注意,我们用这个方法需要在()里面添加一个/
这个符号在我们配置文件里面代表的意思是是http://ip:port/工程名/
但在这里代表的就是工程部署的绝对路径,如下
正如
/
在配置文件中的作用一样,我们的这个/
在我们这里也可以表示部署工程路径,然后我们也可以后面跟着我们部署工程路径中的其他文件夹或者文件来进行路径的打印
像Map一样存取数据
即用到我们的域对象存取删除数据的方法
红笔这里先存入数据,然后蓝笔那里读取数据
我们要讲一个域对象的一个点,就当我们工程加载完成后,无论我们在工程下的哪里,都可以得到我们存入的数据,这就是域
,如下:
看这里,我们在contextServlet2里面访问contextServlet1里面存的数据,我们一样可以访问到