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





先看图





注意几点

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. 46. Permutations(medium, backtrack, 重要)

    Given a collection of distinct numbers, return all possible permutations. For example, [1,2,3] have ...

  2. Jeff Atwood倾情推荐——程序员必读之书

    英文版:<Code Complete 2>中文版:<代码大全(第二版)>作者:Steve McConnell译者:金戈  汤凌  陈硕  张菲出版社:电子工业出版社出版日期:2 ...

  3. [LaTeX] box algorithm adjustbox subfigures, textwidth

    algorithm \begin{figure}[!t] \vspace*{\dimexpr\fboxsep+\fboxrule} \fbox{% \parbox{\dimexpr\linewidth ...

  4. 疯狂的Django 之深度外键跨表查找之疯狂INNER JOIN

    定义Model: from django.db import models class Moreinfo(models.Model): weight = models.FloatField() hei ...

  5. Java中常用缓存Cache机制的实现

    缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例. 这样做可以减少系统开销,提高系统效率. 缓存主要可分为二大类: 一.通过文件缓存,顾名思义文件 ...

  6. leetcode 5 Longest Palindromic Substring--最长回文字符串

    问题描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

  7. Android简易实战教程--第三十九话《Chronometer实现倒计时》

    Android提供了实现按照秒计时的API,今天就是用这个API实现简单的倒计时. 来个布局: <?xml version="1.0" encoding="utf- ...

  8. Detailed Item Cost Report (XML) timed out waiting for the Output Post-processor to finish

    In this Document   Symptoms   Cause   Solution   References APPLIES TO: Oracle Cost Management - Ver ...

  9. 剑指Offer——如何做好自我介绍

    剑指Offer--如何做好自我介绍 前言 自我特点+经历梳理   各位老师好,我叫某某某,XX人.研究生三年级,就读于某某大学信息科学与工程学院软件工程专业.主要使用的开发语言是Java,熟悉基本数据 ...

  10. Hibernate实体映射文件多对多等关系简单应用技巧

    认真开完以后,就能很简单的写出各种关系了 第一步,写注释: <!--xx属性,本类与Yy(类)的多对一 --> <!--xx属性,本类与Yy(类)的一对多 --> <!- ...