努力学习回答P牛的问题!
只是很简单的了解了下,具体每个类提供了哪些功能没有详细描述,尤其是ApplicationContext、Standercontext,比如Standercontext中的WebApp类加载器等没有进行很深入的分析,啥时候看Tomcat的时候再说吧2333。
一、ServletContext
javax.servlet.ServletContext
Servlet规范中规定了一个ServletContext接口,它提供了Web应用所有Servlet的视图,通过它可以对某个Web应用的各种资源和功能进行访问。
PS:可以看到里面提供了很多addFilter addServlet creatFilter方法
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package javax.servlet;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
import java.util.EventListener;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletRegistration.Dynamic;
import javax.servlet.descriptor.JspConfigDescriptor;
public interface ServletContext {
String TEMPDIR = "javax.servlet.context.tempdir";
//对应的属性值是个java.io.File对象,表示该ServletContext对应的临时目录。拿tomcat来说,比如有个应用叫demo,那么 demo对应的ServletContext临时目录就是{Tomcat目录}workCatalinalocalhostdemo。
String ORDERED_LIBS = "javax.servlet.context.orderedLibs";
//ORDERED_LIBS对应的属性值是个java.util.List对象,每个元素表示WEB-INF/lib目录下的 JAR包名称。这些名称的排序是根据它们的web-fragment名称排序的,如果里面没有配 置的话,可能会存在冲突。如果没有在web.xml里面配置或在web-fragment.xml里面配置,那么属性值为null
String getContextPath();
ServletContext getContext(String var1);
int getMajorVersion();
int getMinorVersion();
int getEffectiveMajorVersion();
int getEffectiveMinorVersion();
String getMimeType(String var1);
Set getResourcePaths(String var1);
URL getResource(String var1) throws MalformedURLException;
InputStream getResourceAsStream(String var1);
RequestDispatcher getRequestDispatcher(String var1);
RequestDispatcher getNamedDispatcher(String var1);
/** @deprecated */
Servlet getServlet(String var1) throws ServletException;
/** @deprecated */
Enumeration getServlets();
/** @deprecated */
Enumeration getServletNames();
void log(String var1);
/** @deprecated */
void log(Exception var1, String var2);
void log(String var1, Throwable var2);
String getRealPath(String var1);
String getServerInfo();
String getInitParameter(String var1);
Enumeration getInitParameterNames();
boolean setInitParameter(String var1, String var2);
Object getAttribute(String var1);
Enumeration getAttributeNames();
void setAttribute(String var1, Object var2);
void removeAttribute(String var1);
String getServletContextName();
Dynamic addServlet(String var1, String var2);
Dynamic addServlet(String var1, Servlet var2);
Dynamic addServlet(String var1, Class var2);
extends Servlet> T createServlet(Classvar1) throws ServletException;
ServletRegistration getServletRegistration(String var1);
Map ? extends ServletRegistration> getServletRegistrations();
javax.servlet.FilterRegistration.Dynamic addFilter(String var1, String var2);
javax.servlet.FilterRegistration.Dynamic addFilter(String var1, Filter var2);
javax.servlet.FilterRegistration.Dynamic addFilter(String var1, Class var2);
extends Filter> T createFilter(Classvar1) throws ServletException;
FilterRegistration getFilterRegistration(String var1);
Map ? extends FilterRegistration> getFilterRegistrations();
SessionCookieConfig getSessionCookieConfig();
void setSessionTrackingModes(Setvar1);
Set getDefaultSessionTrackingModes();
Set getEffectiveSessionTrackingModes();
void addListener(String var1);
extends EventListener> void addListener(T var1);
void addListener(Class var1);
extends EventListener> T createListener(Classvar1) throws ServletException;
JspConfigDescriptor getJspConfigDescriptor();
ClassLoader getClassLoader();
void declareRoles(String... var1);
}
二、ApplicationContext
org.apache.catalina.core.ApplicationContext
对应Tomcat容器,为了满足Servlet规范,必须包含一个ServletContext接口的实现,这个实现类就是ApplicationContext。,每个Tomcat的Context容器中都会包含一个ApplicationContext。
我们在idea里查看ServlertContext也可以查看到ApplicationContext
这里还看到了一个ApplicationContextFacade,servlet中的getServletContext()所得到的是一个ApplicationContextFacade对象,ApplicationContextFacade类是ApplicationContext类的包装类
三、StandardContext
org.apache.catalina.core.StandardContext
org.apache.catalina.Context的默认标准实现为StandardContext,Context在Tomcat中代表一个web应用,运行在某个特定的虚拟主机上
四、总结
ServletContext是Servlet规范,org.apache.catalina.core.ApplicationContext是ServletContext的实现。org.apache.catalina.Context 接口是tomcat容器结构中的一种容器,代表的是一个web应用程序。是tomcat独有的。其标准实现是org.apache.catalina.core.StandardContext。是tomcat容器的重要组成部分
总的来说,Context 是指程序运行时需要的一些信息,有点像运行需要的环境信息。
Tomcat 中的 Context 对应一个具体的 Web App,定义了 Web App 的一些运行参数,常见的比如 docBase(表示 Web 文档的位置)、path(表示可以根据请求的前面信息定位具体的 Web App)等。
https://www.zhihu.com/question/36619536/answer/68288614
Servlet 中的 Context 是一个 Web App 中运行的 Servlet 参数环境。
总结来说,一个是 Web App 在 Web 容器中运行时的参数环境,一个是 Servlet 在 Servlet 容器中运行时的参数环境,二者从某种程度上来说,是一个 Java Web 应用的两个方面,一个是与 HTTP 协议相关的(描述一个 HTTP Server 运行时需要的参数),一个是与 Java Servlet 规范相关的(描述 Servlet 运行时需要的参数)
https://www.zhihu.com/question/36619536/answer/68288614
五、参考链接
https://www.zhihu.com/question/36619536
http://xstarcd.github.io/wiki/Java/tomcat_context_Elements_detail.html
https://blog.csdn.net/tongdanping/article/details/102840060
当一束光照进黑暗 那这束光就有罪
原文始发于微信公众号(赛博少女):ServletContext、ApplicationContext、Standercontext
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论