ServletContext详解和用法
- 格式:doc
- 大小:39.50 KB
- 文档页数:3
JavaWeb之ServletContext接⼝⼀、ServletContext 接⼝ 1、ServletContext 是什么 (1)ServletContext 是⼀个接⼝,它表⽰ Servlet 上下⽂对象(可以和程序的容器(服务器)来通信); (2)⼀个 web ⼯程,只有⼀个 ServletContext 对象实例; (3)ServletContext 对象是⼀个域对象; (4)ServletContext 是在 web ⼯程部署启动的时候创建。
在 web ⼯程停⽌的时候销毁 2、域对象 域对象:就是类似于 Map,可以在⾥⾯存取数据,叫域对象。
域对象的范围:指的是存取数据的操作范围。
ServletContext 范围:整个 Web ⼯程。
存数据 取数据 删除数据Map put() get() remove()域对象 setAttribute() getAttribute() removeAttribute()⼆、获取 ServletContext 对象 1、通过 ServletConfig 对象获取ServletContext servletContext = getServletConfig().getServletContext(); 2、通过 getServletContext() ⽅法获取ServletContext servletContext = getServletContext(); 直接调⽤该⽅法,其实是调⽤了 GenericServlet 类中的⽅法,其本质还是通过 ServletConfig 对象获取的。
3、通过 ServletRequest 及其⼦类获取 在 ServletRequest 接⼝中包含了⼀个抽象⽅法来获取 ServletContext:public ServletContext getServletContext(); HttpServletRequest 接⼝继承了ServletRequest 接⼝,其中也就包含了这个⽅法:1 @Override2public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {3 System.out.println("Hello Servlet被访问了");4 ServletContext servletContext = req.getServletContext();5 System.out.println("servletContext = " + servletContext);6 }78 @Override9protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {10super.doPost(req, resp);11 ServletContext servletContext = req.getServletContext();12 System.out.println("servletContext = " + servletContext);13 }三、ServletContext 的常⽤作⽤ 1、常⽤作⽤ (1)获取 web.xml 中配置的上下⽂参数 context-param (2)获取当前的⼯程路径,格式:/⼯程路径 (3)获取⼯程部署后在服务器硬盘上的绝对路径 (4)像 Map ⼀样存取数据 2、案例 (1)读取 context-param 参数 在 web.xml 中配置 context-param1<!--context-param 是上下⽂参数(它属于整个 web ⼯程)-->2<context-param>3<param-name>username</param-name>4<param-value>context</param-value>5</context-param>6<!--context-param 是上下⽂参数(它属于整个 web ⼯程)-->7<context-param>8<param-name>password</param-name>9<param-value>root</param-value>10</context-param> 注意: ① <context-param> 标签要书写在 <web-app> ⾥⾯,<servlet>的外⾯; ②这⾥配置的参数是为整个 web ⼯程配置的,对所有的 servlet 都有效;⽽之前 <init-param> 为某⼀个servlet单独配置的,注意区分;1 @Override2protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {3 ServletContext servletContext = getServletContext();4 System.out.println(servletContext);56//1.获取 context-param 是上下⽂参数7 String username = servletContext.getInitParameter("username");8 System.out.println("username = " + username);9 String password = servletContext.getInitParameter("password");10 System.out.println("password = " + password);1112 Enumeration<String> initParameterNames = servletContext.getInitParameterNames();13while (initParameterNames.hasMoreElements()) {14 String key = initParameterNames.nextElement();15 System.out.println(key + "=" + servletContext.getInitParameter(key));16 }17 } (2)获取当前的⼯程路径(虚拟路径):格式:/⼯程路径 获取当前⼯程的路径(虚拟路径),格式:/⼯程路径String contextPath = getServletContext().getContextPath(); (3)获取⼯程部署后在服务器硬盘上的绝对路径(真实路径) 获取⼯程绝对路径(真实路径)String realPath = getServletContext().getRealPath("/"); Demo:1 // 获取⼯程部署后在服务器硬盘上的绝对路径(真实路径)2 /**3 * / 斜杠被服务器解析地址为:http://ip:port/⼯程名/ 映射到 IDEA/eclipse 代码的 web ⽬录4 */5 System.out.println("⼯程部署的路径是:" + context.getRealPath("/"));6 System.out.println("⼯程下 css ⽬录的绝对路径是:" + context.getRealPath("/css"));7 System.out.println("⼯程下 imgs ⽬录 1.jpg 的绝对路径是:" + context.getRealPath("/imgs/1.jpg"));89 String b = context.getRealPath("/b.txt");//web⽬录下资源访问10 String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF⽬录下的资源访问11 String a = context.getRealPath("/WEB-INF/classes/a.txt");//src⽬录下的资源访问 (4)作为域对象,像Map⼀样存取数据(1)setAttribute(String name,Object value); 存储数据(2)getAttribute(String name); 获取数据(3)removeAttribute(String name); 移除数据 ServletContext 对象范围:所有⽤户所有请求的数据(谨慎使⽤) (5)获取MIME类型 MIME 类型:在互联⽹通信过程中定义的⼀种⽂件数据类型。
servletConfig与servletContext的区别⼀、区别1、定义1)ServletConfig:Servlet的配置对象,容器在初始化Servlet时通过它传递信息给Servlet。
2)ServletContext:上下⽂对象,提供了⼀系列⽅法供Servlet与Web容器交互。
2、创建时机1)ServletConfig:在容器初始化Servlet的时候,并为其提供上下⽂初始化参数的名/值对的引⽤。
2)ServletContext:容器启动的时候,并为其提供Servlet初始化参数的名/值对的引⽤。
3、作⽤范围(可见性)1)ServletContext:每个JVM中每个Web应⽤⼀个ServletContext。
2)ServletConfig:每个JVM中每个Web应⽤的每个Servlet⼀个ServletConfig。
所以ServletConfig=Servlet初始化参数,ServletContext=上下⽂初始化参数。
4、DD中的初始化参数配置1)ServletConfig配置如下(注意是在<servlet>标签中):Xml代码1. <servlet>2. <init-param>3. <param-name>email</param-name>4. <param-value></param-value>5. </init-param>6. <servlet-name>JarDownload</servlet-name>7. <servlet-class>com.linwei.servlet.JarDownload</servlet-class>8. </servlet>2)ServletContext配置如下(注意是直接在<web-app>标签下):Xml代码1. <context-param>2. <param-name>email</param-name>3. <param-value></param-value>4. </context-param>5、Servlet中的访问⽅法1)ServletConfig:getServletConfig().getInitParameter(“name”)。
getServletContext()⽅法详解javax.servlet.ServletContext接⼝⼀个servlet上下⽂是servlet引擎提供⽤来服务于Web应⽤的接⼝。
Servlet上下⽂具有名字(它属于Web应⽤的名字)唯⼀映射到⽂件系统的⼀个⽬录。
⼀个servlet可以通过ServletConfig对象的getServletContext()⽅法得到servlet上下⽂的引⽤,如果servlet直接或间接调⽤⼦类GenericServlet,则可以使⽤getServletContext()⽅法。
Web应⽤中servlet可以使⽤servlet上下⽂得到:1.在调⽤期间保存和检索属性的功能,并与其他servlet共享这些属性。
2.读取Web应⽤中⽂件内容和其他静态资源的功能。
3.互相发送请求的⽅式。
4.记录错误和信息化消息的功能。
ServletContext接⼝中的⽅法Object getAttribute(String name) 返回servlet上下⽂中具有指定名字的对象,或使⽤已指定名捆绑⼀个对象。
从Web应⽤的标准观点看,这样的对象是全局对象,因为它们可以被同⼀servlet在另⼀时刻访问。
或上下⽂中任意其他servlet访问。
void setAttribute(String name,Object obj) 设置servlet上下⽂中具有指定名字的对象。
Enumeration getAttributeNames() 返回保存在servlet上下⽂中所有属性名字的枚举。
ServletContext getContext(String uripath) 返回映射到另⼀URL的servlet上下⽂。
在同⼀服务器中URL必须是以“/”开头的绝对路径。
String getInitParameter(String name) 返回指定上下⽂范围的初始化参数值。
此⽅法与ServletConfig⽅法名称不⼀样,后者只应⽤于已编码的指定servlet。
今天我们学习的是ServletContext的应用。
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。
ServletContext对象通常也被称之为context域对象。
1.多个Servlet通过ServletContext对象实现数据共享。
在InitServlet的Service方法中利用ServletContext对象存入需要共享的数据/*获取ServletContext对象*/ServletContext context = this.getServletContext();//存入共享的数据context.setAttribute("name", "haha");在其它的Servlet中利用ServletContext对象获取共享的数据/*获取ServletContext对象*/ServletContext context = this.getServletContext();//获取共享的数据String name = context.getAttribute("name");System.out.println("共享的内容值是:"+name);2.获取WEB应用的初始化参数。
在web.xml文件中配置需要初始化的参数信息。
<web-app><context-param><param-name>url</param-name><param-value>jdbc:mysql://localhost:3306/4g</param-value> </context-param><context-param><param-name>password</param-name><param-value>1314qr</param-value></context-param><context-param><param-name>user</param-name><param-value>root</param-value></context-param></web-app>在DemoServlet的doPost方法中测试获取初始化参数的步骤如下: /*获取ServletContext对象*/ServletContext context = this.getServletContext();/*获取初始化参数*///获取指定名称的初始化参数String url = context.getInitParameter("url");//获取web.xml文件中所有的初始化应用参数Enumeration<String> enumer = context.getInitParameterNames();while(enumer.hasMoreElements()){String name = enumer.nextElement();String value = context.getInitParameter(name);System.out.println(name+"=========="+value);}2.实现Servlet的转发:在测试的Servlet中实现转发的步骤如下:/*要利用ServletContext对象实现转发获取对象*/ServletContext context = this.getServletContext();//在request对象中存入name属性request.setAttribute("name", "haha");/*根据转发的地址获取RequestDispatcher对象*/RequestDispatcher rd = context.getRequestDispatcher("/index.jsp");//调用转发方法以下采用任意方法即可rd.forward(request, response);//rd.include(request, response);注意:forward与include的区别forward方法是把请求的内容转发到另外的一个servlet.而include是把另一个servlet处理过后的内容拿过来.(forward方法调用后在响应中的没有提交的内容被自动消除。
ServletContext详解ServletContext是servlet与servlet容器之间的直接通信的接口。
Servlet 容器在启动一个Web应用时,会为它创建一个servletContext对象。
每个web应用有唯一的servletContext对象。
同一个web应用的所有servlet 对象共享一个serveltContext,servlet对象可以通过它来访问容器中的各种资源。
servletContext接口提供的方法分为以下几种类型:用于在Web应用范围内存取共享数据的方法。
注:web应用范围具有以下两层含义:(1)表示有web应用的生命周期构成的时间段.(2)表示在web应用的生命周期内所有web组件的集合。
setAttribute():把一个java对象和一个属性名绑定,并存放到ServletContext中,参数name指定属性名,参数Object表示共享数据。
getAttribute(String name):根据参数给定的属性名,返回一个Object 类型的对象。
getAttributeNames():返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的属性名。
removeAttribute(String name):根据参数指定的属性名,从servletContext对象中删除匹配的属性。
访问当前Web应用的资源getContextpath():返回当前web应用的URL入口。
getInitParameter(String name):返回web应用方位内的匹配的初始化参数值。
在中<web-app>元素中<context-param>元素表示应用范围内的初始化参数。
getInitParameterNames():返回一个Enumeration对象。
getServletContextName():返回web应用的名字。
ServletContext(重要)一个项目只有一个ServletContext对象!我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据!与天地同寿!!!这个对象在Tomcat启动时就创建,在Tomcat关闭时才会死去!1ServletContext概述服务器会为每个应用创建一个ServletContext对象:●ServletContext对象的创建是在服务器启动时完成的;●ServletContext对象的销毁是在服务器关闭时完成的。
ServletContext对象的作用是在整个Web应用的动态资源之间共享数据!例如在AServlet 中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就是共享数据了。
2获取ServletContext●ServletConfig#getServletContext();●GenericServlet#getServletContext();●HttpSession#getServletContext()●ServletContextEvent#getServletContext()在Servlet中获取ServletContext对象:●在void init(ServletConfig config)中:ServletContext context = config.getServletContext();,ServletConfig类的getServletContext()方法可以用来获取ServletContext对象;在GenericeServlet或HttpServlet中获取ServletContext对象:●GenericServlet类有getServletContext()方法,所以可以直接使用this.getServletContext()来获取;3域对象的功能ServletContext是JavaWeb四大域对象之一:●PageContext;●ServletRequest;●HttpSession;●ServletContext;所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操作数据的方法:●void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,例如:servletContext.setAttribute(“xxx”, “XXX”),在ServletContext中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。
context java用法在Java中,context是一个关键词,用于表示当前代码的执行环境。
它可以存储一些状态信息,供代码进行引用和操作。
Java中有许多不同的上下文,每个上下文都有不同的用法。
以下是一些常见的Java上下文用法示例:1. Servlet上下文:在Java Web应用程序中,可以使用ServletContext对象来获取有关当前Web应用程序的信息,例如应用程序的名称、服务器信息等。
```javaServletContext context = getServletContext();String appName = context.getServletContextName();String serverInfo = context.getServerInfo();```2. Spring应用程序上下文:Spring框架中的ApplicationContext 对象代表整个Spring应用程序的上下文。
它负责加载和管理所有的bean,以及提供其它应用程序级别的功能。
```javaApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); MyBean myBean = (MyBean) context.getBean("myBean"); myBean.doSomething();```3. 线程上下文:ThreadLocal类可用于存储和访问线程本地变量。
每个线程都有自己的变量副本,互不干扰。
```javaThreadLocal<Integer> threadLocal = new ThreadLocal<>(); threadLocal.set(10);int value = threadLocal.get();```4. 安全上下文:在Java中,可以使用SecurityContext类来管理安全相关的上下文信息,例如用户认证和授权信息。
ServletContext详解ServletContext基本介绍你可以把它想象成⼀个公⽤的空间,可以被所有的客户访问,也就是说A客户端可以访问D,B客户端可以访问D,C客户端也可以访问D。
WEB容器在启动时,它会为每个Web应⽤程序都创建⼀个对应的ServletContext,它代表当前Web应⽤。
并且它被所有客户端共享。
ServletContext对象可以通过ServletConfig.getServletContext()⽅法获得对ServletContext对象的引⽤,也可以通过this.getServletContext()⽅法获得其对象的引⽤。
由于⼀个WEB应⽤中的所有Servlet共享同⼀个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。
ServletContext对象通常也被称之为context域对象。
公共聊天室就会⽤到它。
当web应⽤关闭、Tomcat关闭或者Web应⽤reload的时候,ServletContext对象会被销毁怎么使⽤ServletContext使⽤ServletContext:(1) 如何得到ServletContext对象this.getServletContext();this.getServletConfig().getServletContext();request.getSession().getServletContext();(2) ⽅法添加属性:setAttribute(String name, Object obj);得到值:getAttribute(String name),//这个⽅法返回Object删除属性:removeAttribute(String name)得到Mime类型(⼤类型/⼩类型,jpeg):context.getMinmeType(filename);获取服务器真是⽂件路径: context.getRealPath(fileNamePath(相对路径));(3) ⽣命周期ServletContext中的属性的⽣命周期从创建开始,到服务器关闭结束。
servletcontext常用方法ServletContext是Java Servlet规范中的一个重要接口,提供了访问Web应用程序的上下文信息的方法。
下面是ServletContext常用方法的描述:1. getInitParameter(String name):根据指定的参数名返回初始化参数的值。
初始化参数在web.xml文件中定义,可以用来配置Web应用程序的行为。
2. getInitParameterNames():返回一个枚举对象,包含所有初始化参数的名称。
可以使用该方法遍历所有的初始化参数。
3. getAttribute(String name):根据指定的属性名返回属性值。
属性是在应用程序范围内共享的对象,可以在整个应用程序中使用。
4. getAttributeNames():返回一个枚举对象,包含所有属性的名称。
可以使用该方法遍历所有的属性。
5. setAttribute(String name, Object object):设置一个属性的值。
可以将对象存储在应用程序的ServletContext中,以便在整个应用程序中共享。
6. removeAttribute(String name):根据指定的属性名移除属性。
当不再需要某个属性时,可以使用该方法将其从ServletContext中删除。
7. getServletContextName():返回ServletContext的名称。
通常为Web应用程序的名称。
8. getServerInfo():返回服务器的信息,包括服务器产品名称和版本号。
9. getContextPath():返回该Web应用程序的上下文路径。
上下文路径是Web 应用程序在服务器上的唯一标识。
10. getResourcePaths(String path):返回指定路径下的所有资源路径。
可以使用该方法获取Web应用程序中的所有文件和目录。
通过使用上述方法,开发人员可以方便地获取和操作ServletContext中的参数和属性,以及获取有关Web应用程序和服务器的信息。
ServletContext实现数据共享ServletContext实现数据共享1、加⼊新Module补全项⽬,并把web.xml更新建⽬录,建类HelloServlet:2、 getServletContext(上下⽂对象)的作⽤1package com.wang.servlet;23import javax.servlet.ServletContext;4import javax.servlet.ServletException;5import javax.servlet.http.HttpServlet;6import javax.servlet.http.HttpServletRequest;7import javax.servlet.http.HttpServletResponse;8import java.io.IOException;9import java.io.PrintWriter;1011public class HelloServlet extends HttpServlet {12 @Override13protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {14 ServletContext context = this.getServletContext();15 }1617 @Override18protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {19 doGet(req, resp);20 }21 }View CodeServletContext是⼀个凌驾于所有的servlet之上的东西,web容器在启动的时候,它会为每个web程序都创建⼀个对应的ServletContext对象,它代表了当前的web应⽤。
ServletContext详解
ServletContext是servlet与servlet容器之间的直接通信的接口。
Servlet 容器在启动一个Web应用时,会为它创建一个servletContext对象。
每个web应用有唯一的servletContext对象。
同一个web应用的所有servlet对象共享一个serveltContext,servlet对象可以通过它来访问容器中的各种资源。
servletContext接口提供的方法分为以下几种类型:
用于在Web应用范围内存取共享数据的方法。
注:web应用范围具有以下两层含义:
(1)表示有web应用的生命周期构成的时间段.
(2)表示在web应用的生命周期内所有web组件的集合。
setAttribute(String name,ng.Object object):把一个java对象和一个属性名绑定,并存放到ServletContext中,参数name指定属性名,参数Object表示共享数据。
getAttribute(String name):根据参数给定的属性名,返回一个Object 类型的对象。
getAttributeNames():返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的属性名。
removeAttribute(String name):根据参数指定的属性名,从servletContext对象中删除匹配的属性。
访问当前Web应用的资源
getContextpath():返回当前web应用的URL入口。
getInitParameter(String name):返回web应用方位内的匹配的初始化参数值。
在web.xml中<web-app>元素中<context-param>元素表示应用范围内的初始化参数。
getInitParameterNames():返回一个Enumeration对象。
getServletContextName():返回web应用的名字。
即<web-app>元素中<display-name>元素的值。
getRequestDispatcher(String path):返回一个用于向其他web组件转发请求的RequestDispatcher对象。
访问servlet容器的相关信息
getContext(String uripath):根据参数指定的url,返回当前servlet 容器中其他web应用的servletContext()对象。
访问web容器的相关信息
getMajorV ersion():返回servlet容器支持的java servlet API 的主板本号。
getMinorV ersion():返回servlet容器支持的java Servlet API的此版本号。
getServerInfo():返回servlet容器的名字和版本。
访问服务器端的文件系统资源
getRealPath(String path):根据参数指定的虚拟路径,返回文件系统中的一个真实的路径。
getResource(String path):返回一个映射到参数指定的路径的url。
getResourceAsStream(String path):返回一个用于读取参数指定的文件的输入流。
(把文件读到输入流中去)
getMimeType(String file):返回参数指定的文件的MIME类型。
输出日志
log(String msg):想servlet的日志文件中写日志。
log(String message, ng.Throwable throwable):向servlet 的日志文件中写错误日志,以及异常的堆栈信息。
ServletContext对象获得几种方式:
Javax.servlet.http.HttpSession.getServletContext()
Javax.servlet.jsp.PageContext.getServletContext()
Javax.servlet.ServletConfig.getServletContext()。