servlet-2(随笔有字数限制吗,不开心)

web容器中的两个map

Q1  当servlet实例创建好之后被放在了哪里呢?

  serlvet实例被创建好之后,会被放到一个MAP集合中去,该map集合的key是url,value则是serlvet实例的引用,即Map<String.Servlet>,当web容器解析到对应的serlvet的url之后,先根据url到这个map中查找是否存在其所对应的value,若存在则直接调用servcice方法,若不存在则需要创建该实例。

Q2 若servlet实例不存在,web容器又是根据什么创建这个servlet实例呢?

 如果servlet实例不存在,在web容器中还存在一个Map集合,这个集合的key是url,而value则是web.xml中配置的Servlet与之对应的全限定性类名,即Map<String,String>。于是当在第一个map中没有找到其所对应的servlet实例时,它会到第二map中找到其多对应的类名,再根据反射机制,创建这个servlet实例,然后再将创建好的servlet实例放到第一个map中去。

 

关于ServletConfig()方法

   在servlet的init()方法中,具有唯一的一个参数ServletConfig。ServletConfig是个接口,顾名思义就是servlet的配置,即在web.xml中对当前servlet类的配置信息,Servlet规范将servlet的配置信息全部封装到了ServletConfig接口中。  在web容器应用调用init()方法时,web容器首先会将web.xml中当前servlet类的配置信息封装为一个对象,这个对象的类型实现了servletConfig接口,web容器会将这个对象传递给init()方法中的ServletConfig参数.

  web.xml中可以通过init-param来设置初始化参数

在web.xml中配置的参数会被传递到init()方法的ServletConfig参数中去,我们可以在servlet中通过getInitParmeter("name")获取这些配置

 

 

ServletContext  

  ServletContext即是Servlet的上下文,是一个接口,是web容器中所有的servlet的运行时环境,这个环境随着web应用的启动而创建,随着web应用的关闭而销毁,也就是说一个web应用的只有一个Servlet上下文,即只有一个ServletContext对象。  

  ServletContext不仅包含了web.xml中的配置信息还包含了所有的servlet可以共享的数据 。

  在web.xml中可以通过<context-param/>来进行上下文参数的配置,与servlet初始化参数<init-param/>不同的是,上下文参数所有的servlet都还可以获取到, servlet初始化参数只有当前servlet可以获取到。

而在servlet中则是通过ServletConfg.getServletContext()获得上下文对象

 

posted @ 2017-11-22 10:33  昵称什么的都不重要  阅读(221)  评论(0编辑  收藏  举报