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





先看图





注意几点

1 GenericServlet有两个init方法#

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






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

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

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

关于范围问题

我们看一小段代码

 

  <servlet>
    <servlet-name>dd</servlet-name>
     <init-param>
       <param-name>glt</param-name>
       <param-value>dlf love glt</param-value>
    </init-param>
    <servlet-class>cdm.core.action.dd</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>dd</servlet-name>
    <url-pattern>/servlet/dd</url-pattern>
  </servlet-mapping>

	<context-param>
		<param-name>dlf</param-name>
		<param-value>glt love dlf</param-value>
	</context-param>

在我们的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<String, String> parameters = new HashMap<String, String>();

为什么会有一个facade。

这个东西叫门面模式。

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

感谢glt

glt?glt是谁?

我媳妇!

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

参考资料

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

PageContext ServletContext ServletConfig辨析的更多相关文章

  1. ServletContext+ServletConfig内容

    ServletConfig { ① //读取web.xml配置信息 ServletConfig config = this.getServletConfig(); //读取类名称 config.get ...

  2. 第一个web程序(web.xml , ServletConfig , ServletContext)

    一:第一个jsp程序 1.项目设计结构 2.新建Person.java package com.java.demo; public class Person { public void printSt ...

  3. JavaWeb学习笔记:ServletConfig()和ServletContext()

    ServletConfig()和ServletContext() 1.ServletConfig() ServletConfig是一个接口,它由server提供商来实现. ServletConfig封 ...

  4. servletconfig和servletcontext学习

    servletconfig java.lang.String getInitParameter(java.lang.String name)  //根据参数名获取参数值 java.util.Enume ...

  5. Server,Servlet,ServletConfig,ServletContext,Session,Request,Response

    Server流程 解析URL->找到应用->找到Servlet->实例化Servlet->调用init->调用service->返回响应->调用destroy ...

  6. ServletContext(重要)

    一个项目只有一个ServletContext对象! 我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据! 这个对象在Tomcat启动时就创建,在Tomcat关 ...

  7. javaWEB总结(4):ServletContext对象方法

    前言:之前每次学到ServletContext对象都会抗拒,跳着学,后面才发现有很多不懂的原理都在这个对象里面,后悔莫及,所以今天特地把他单放在一篇文章里,算是对他的忏悔. 1.什么是ServletC ...

  8. [原创]java WEB学习笔记06:ServletContext接口

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. ServletContext对象应用——三天免登录

    1.用到的知识点: (1)Cookie (2)Session (3)ServletContext 其中Cookie和Session是会话技术的组成部分,一次会话从打开浏览器的某个站点开始,到浏览器关闭 ...

随机推荐

  1. 64. Minimum Path Sum(中等, 又做出一个DP题, 你们非问我开不开心,当然开心喽!^^)

    Given an m x n grid filled with nonnegative numbers, find a path from top left to bottom right which ...

  2. 3-学习GPRS_Air202(需要知道的关于Lua的一些基本的知识)

      http://www.cnblogs.com/yangfengwu/p/8948935.html 学东西一定是打破沙锅学到底,有问题就解决问题,不要试图去回避或者放弃解决当前的问题,如果总是回避或 ...

  3. ubuntu15.10 安装 virtualbox5.0

    首先安装依赖包.ubuntu15.01安装的时候会出现这个错误: virtualbox-); however: Package libvpx1 is not installed 而且sudo apt- ...

  4. Docker有用的资源

    资源链接 Docker 主站点: https://www.docker.io Docker 注册中心API: http://docs.docker.com/reference/api/registry ...

  5. 微信小程序基础之表单Form的使用

    表单Form的应用很广泛,我们可以利用form设计登录注册,也可以设计一种答题问卷的形式,今天主要讲一下form的使用 form表单,将组件内输入的"switch","i ...

  6. Linux下创建软链接

    创建软链接: ln -s /newdisk/app-tpl/apache-tomcat-7.0.47/webapps/app-tpl-webapp/ /newdisk/UCMSServer/tomca ...

  7. premake设置静态运行库

    premake设置静态运行库(金庆的专栏)链接protobuf库时,碰到RuntimeLibrary不匹配:1>libprotobufd.lib(int128.obj) : error LNK2 ...

  8. Eclipse中配置javap命令

    Run→External Tools→External Tools Configurations-进入如下图二所示的Program配置界面.也可以通过如下图一所示的工具栏按钮进入Program配置界面 ...

  9. Unsupported major.minor version 52.0

    今天运行项目,切换一下eclipse,运行程序突然发现普通的类main()方法无法运行,报错详细信息如下: Exception in thread "main" java.lang ...

  10. EventBus详解

    EventBus详解 简介 github原文 EventBus... * simplifies the communication between components - decouples eve ...