ServletContext、ApplicationContext、Standercontext

admin 2024年2月7日23:51:51评论11 views字数 4986阅读16分37秒阅读模式

努力学习回答P牛的问题!

ServletContext、ApplicationContext、Standercontext

只是很简单的了解了下,具体每个类提供了哪些功能没有详细描述,尤其是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> 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> 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> 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

ServletContext、ApplicationContext、Standercontext

这里还看到了一个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

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月7日23:51:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ServletContext、ApplicationContext、Standercontexthttp://cn-sec.com/archives/820321.html

发表评论

匿名网友 填写信息