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





先看图





注意几点

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. AIX 命令

    1,[ctrl]+h 删除命令 2, set -o emacs后: [ctrl]+p 看上条命令 [ctrl]+n 看下条命令 两次[esc] 自动补全 3, set -o vi 后,可以按照vi编辑 ...

  2. Docker服务端防护

    运行一个容器或应用程序的核心是通过 Docker 服务端.Docker 服务的运行目前需要 root 权限,因此其安全性十分关键. 首先,确保只有可信的用户才可以访问 Docker 服务.Docker ...

  3. WiFi文件上传框架SGWiFiUpload

    背景 在iOS端由于文件系统的封闭性,文件的上传变得十分麻烦,一个比较好的解决方案是通过局域网WiFi来传输文件并存储到沙盒中. 简介 SGWiFiUpload是一个基于CocoaHTTPServer ...

  4. 自定义支持多行显示的RadioGroup

    自定义支持多行显示的RadioGroup 原生的RadioGroup继承自LinearLayout,即只能支持一横排或者一竖排的排列显示RadioButton 现在改写RadioGroup,使它支持多 ...

  5. IOS开发初体验

    IOS开发初体验 搭建开发环境 不多说什么了,开发环境的搭建太简单了,上App Store搜索XCode下载就行了,说多了都是眼泪 创建第一个IOS项目--HolleIOS 创建工程 选择工程创建位置 ...

  6. hadoop入门级总结三:hive

    认识hive  Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务运行  Hive是建立在 ...

  7. pycallgraph 追踪Python函数内部调用

    安装 安装pycallgraph 安装依赖 使用 待测脚本 追踪脚本 追踪结果 高级篇 隐藏私密函数 控制最大追踪深度 总结 GitHub上好代码真的是太多了,名副其实的一个宝藏.但是最近自己也反思了 ...

  8. VIM编辑器操作命令积累

    开始学习VIM编辑器了,计划着每周学习几个新命令,记录在本篇博客中. 1.第一次接触 vi demo.txt 进入Normal模式查看文本 i 进入Insert模式插入内容,编辑文本 nG n代表行号 ...

  9. 剑指Offer——乐视笔试题+知识点总结

    剑指Offer--乐视笔试题+知识点总结 情景回顾 时间:2016.9.19 15:10-17:10 地点:山东省网络环境智能计算技术重点实验室 事件:乐视笔试   总体来说,乐视笔试内容体量不算少, ...

  10. Linux下如何阅读开源项目

    标签(空格分隔): code SLAM是一个大型的项目,而且通常都是基于linux平台的.对于大部分没有linux经验的人来说,如何在linux下拥有vs代码阅读体验就非常重要了.这篇博客就简答的介绍 ...