PageContext ServletContext ServletConfig辨析

网友投稿 483 2022-11-26

PageContext ServletContext ServletConfig辨析

PageContext ServletContext ServletConfig辨析

上面三个东西都是什么关系呀?

先看图

注意几点

1 GenericServlet有两个init方法# 2 GenericServlet既实现了ServletConfig方法,它自己由依赖一个ServletConfig(就是说,GenericServlet中有一个成员变量的类型是ServletConfig)

pageContext是在jsp中用的,可以获得页面范围内的一些数据

ServletContext,里面存放的是Application范围内的参数

ServletConfig里面存放的是本serlvet内部的参数。

关于范围问题

我们看一小段代码

dd glt dlf love glt cdm.core.action.dd dd /servlet/dd dlf glt love dlf

在我们的servlet里,在init或者doget/dopost里 写下面的代码:

System.out.println("dd config "+servletConfig.getInitParameter("glt")); System.out.println(" context "+getServletContext().getInitParameter("dlf"));

如果我们肯看一下上面的uml图,就能发现,我们直接在servlet里调用getInitParameter,和上面的servletConfig.getInitParameter是一样的。

当时的一个小疑问

我们知道,ServletConfig里面保存的是本servlet的参数。

那么我猜想,最终保存数据的那个实现了ServletConfig对象的类,里面肯定有一个成员变量是map类型的

上面的图里,genericServlet里面的getInitParameter调用的是ServletConfig的getInitParameter。

那数据到底在哪里呢?

换句话说,GenericServlet里面的ServletConfig到底是个什么类型呢?

开启debug模式

最终,我们能找到StandardWrapperFacade类,它实现了ServletConfig,并且,它包装了StandardWrapper,而StandardWrapper就是我们要找的终极目标。

/**

* The initialization parameters for this servlet, keyed by

* parameter name.

*/

protected HashMap parameters = new HashMap();

为什么会有一个facade。

这个东西叫门面模式。

这么吧,大家看看两个类各有多大,你就明白了。

感谢glt

glt?glt是谁?

我媳妇!

程序员有个媳妇多不容易呀,我也就只能在这里炫一下了

参考资料

​​ web.xml中在Servlet中获取context-param和init-param内的参数​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring揭秘读书笔记 八 数据访问异常体系
下一篇:Struts Chain ClassCastException Aop
相关文章

 发表评论

暂时没有评论,来抢沙发吧~