在编写servlet过程中,需要用到 ServletConfig、ServletContext对象,对这两种对象的介绍如下:

ServletContext对象:servlet容器在启动时会加载web应用,并为每个web应用创建唯一的servlet context对象,可以把ServletContext看成是一个Web应用的服务器端组件的共享内存,在ServletContext中可以存放共享数据。ServletContext对象是真正的一个全局对象,凡是web容器中的Servlet都可以访问。

servletConfig对象:用于封装servlet的配置信息。从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对servlet自身有效,一个servlet的ServletConfig对象不能被另一个servlet访问。

在servlet中如何获取ServletContext对象和ServletConfig对象,请看下面代码:

  1. import javax.servlet.ServletConfig;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.ServletRequest;
  4. import javax.servlet.ServletResponse;
  5. import javax.servlet.http.HttpServlet;
  6. public class Servlet1 extends HttpServlet{
  7. @Override
  8. public void init() throws ServletException
  9. {
  10. ServletConfig config = this.getServletConfig();
  11. System.out.println("Servlet1 config=="+config);
  12. System.out.println("Servlet1 间接获取context==" +config.getServletContext() );
  13. System.out.println("Servlet1 直接获取context==" + this.getServletContext());
  14. System.out.println("Servlet1 param_value==" + config.getInitParameter("servlet1_param_name"));
  15. System.out.println("context_value==" + this.getServletContext().getInitParameter("context_param"));
  16. System.out.println("*********************************");
  17. }
  18. @Override
  19. public void service(ServletRequest req, ServletResponse resp)
  20. throws ServletException{
  21. }
  22. @Override
  23. public void destroy() {
  24. }
  25. }

Servlet2的代码:

  1. import javax.servlet.ServletConfig;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.ServletRequest;
  4. import javax.servlet.ServletResponse;
  5. import javax.servlet.http.HttpServlet;
  6. public class Servlet2 extends HttpServlet {
  7. @Override
  8. public void init() throws ServletException
  9. {
  10. ServletConfig config = this.getServletConfig();
  11. System.out.println("Servlet2 config=="+config);
  12. System.out.println("Servlet2 间接获取context==" +config.getServletContext());
  13. System.out.println("Servlet2 直接获取context==" + this.getServletContext());
  14. System.out.println("Servlet2 param_value==" + config.getInitParameter("servlet2_param_name"));
  15. System.out.println("context_value==" + this.getServletContext().getInitParameter("context_param"));
  16. System.out.println("*********************************");
  17. }
  18. @Override
  19. public void service(ServletRequest req, ServletResponse resp)
  20. throws ServletException{
  21. }
  22. @Override
  23. public void destroy() {
  24. }
  25. }

web.xml文件的配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4"
  3. xmlns="http://java.sun.com/xml/ns/j2ee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  7. <servlet>
  8. <servlet-name>servlet_1</servlet-name>
  9. <servlet-class>com.test.servlet.Servlet1</servlet-class>
  10. <init-param>
  11. <param-name>servlet1_param_name</param-name>
  12. <param-value>value1</param-value>
  13. </init-param>
  14. <load-on-startup>1</load-on-startup>
  15. </servlet>
  16. <servlet>
  17. <servlet-name>servlet_2</servlet-name>
  18. <servlet-class>com.test.servlet.Servlet2</servlet-class>
  19. <init-param>
  20. <param-name>servlet2_param_name</param-name>
  21. <param-value>value2</param-value>
  22. </init-param>
  23. <load-on-startup>0</load-on-startup>
  24. </servlet>
  25. <context-param>
  26. <param-name>context_param</param-name>
  27. <param-value>value3</param-value>
  28. </context-param>
  29. <welcome-file-list>
  30. <welcome-file>index.jsp</welcome-file>
  31. </welcome-file-list>
  32. </web-app>

部署到tomcat中,然后启动服务,在控制台打印出如下信息:

Servlet2 config==org.apache.catalina.core.StandardWrapperFacade@13d422d
Servlet2 间接获取context==org.apache.catalina.core.ApplicationContextFacade@1123c5f
Servlet2 直接获取context==org.apache.catalina.core.ApplicationContextFacade@1123c5f
Servlet2 param_value==value2
context_value==value3
*********************************
Servlet1 config==org.apache.catalina.core.StandardWrapperFacade@14683c0
Servlet1 间接获取context==org.apache.catalina.core.ApplicationContextFacade@1123c5f
Servlet1 直接获取context==org.apache.catalina.core.ApplicationContextFacade@1123c5f
Servlet1 param_value==value1
context_value==value3
*********************************

通过控制台打印的信息可以得出如下结论:

1、在web.xml配置文件中,对没个servlet的配置里,有一
项<load-on-startup></load-on-startup>,它的含义是:标记容器是否在启动的时候就加载这个
servlet。当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;当是一个负数时或者没有指定时,则指示容器在该servlet被
选择时才加载。正数的值越小,启动该servlet的优先级越高。

servlet_2虽然配置在servlet_1后面,但是它的load-on-startup为0,启动的优先级高于servlet_1,所以servlet_2先启动。

2、获取ServletContext的两种方式,直接获取和间接获取,得到的对象都是同一个。同时在servlet1和servlet2中取得的ServletContext对象都是同一个对象,说明整个web应用都只有一个唯一的ServletContext实例;

3、servlet1与servlet2的serveletConfig对象是不一样的,说明ServletConfig对象的作用范围仅在servlet中。

mvc-servlet---servletContext与servletConfig2的更多相关文章

  1. 【原】tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决

    现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...

  2. tomcat7 启动项目报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()

    JDK版本:jdk1.8.0_77 Tomcat 版本:apache-tomcat-7.0.47 异常重现步骤: 1.完成项目部署 2.启动Tomcat 异常头部信息:java.lang.NoSuch ...

  3. paip.spring3 mvc servlet的配置以及使用最佳实践

    paip.spring3 mvc servlet的配置以及使用最佳实践 1. Web.xml 1 2. springMVC.xml 2 1. mvcAction .mvcAction 2 2. Res ...

  4. java.lang.NoClassDefFoundError: javax/servlet/ServletContext

    方法1:把SpringBoot中main方法所在的class不再继承org.springframework.boot.context.web.SpringBootServletInitializer即 ...

  5. tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决

    现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...

  6. SpringBoot报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;

    错误:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String ...

  7. Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;

    运行tomat  报错: Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Lj ...

  8. Spring boot Unable to start embedded Tomcat报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()

    Spring boot Unable to start embedded Tomcat 报错 java.lang.NoSuchMethodError: javax.servlet.ServletCon ...

  9. Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext

    Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext   场景描述 项目中用到spring boo ...

  10. java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;

    问题描述:在eclipse3.7中启动tomcat6时一直出现这个错误, java.lang.NoSuchMethodError: javax.servlet.ServletContext.getCo ...

随机推荐

  1. 0,SFDC 管理员篇 - 整体框架

    SFDC 框架布局, 通过以下分类我们可以了解Salesforce 每个云上所提供的功能和用途. ●销售云 Sales Cloud 销售自动化(Sales ForceAutomation,SFA)&a ...

  2. 关于学习是UIWebView的一些思考

    前几天因为数据中加载有html语言的数据,关于html语言和UIWebView,有一些纠结,经过几天的研究,也有了一些自己的简单的见解.          我有两个页面需要加载html语言(注意,这里 ...

  3. 15 个有用的 MySQL/MariaDB 性能调整和优化技巧(转载的一篇好文)

    MySQL 是一个强大的开源关系数据库管理系统(简称 RDBMS).它发布于 1995 年(20年前).它采用结构化查询语言(SQL),这可能是数据库内容管理中最流行的选择.最新的 MySQL 版本是 ...

  4. 【kettle】window安装与配置

    1.下载kettle包,并解压http://community.pentaho.com/projects/data-integration/2.安装jdk,并配置java环境 a).打开我的电脑--属 ...

  5. php 解决json_encode中文UNICODE转码问题

    用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似"\u***"的格式,如果想汉字不进行转码,这里提供三种方法 1.升级PHP,在PHP5. ...

  6. UVM的factory机制

    在UVM中使用工厂模式基本上分为三个步骤: 1. 注册 当定义一个类的时候,它的类型必须要注册,UVM已经提供了专用的宏. `uvm_component_utils(class_type_name) ...

  7. Android源代码结构分析

    Google提供的Android包含了:Android源代码,工具链,基础C库,仿真环境,开发环境等,完整的一套.第一级别的目录和文件如下所示:----------------├── Makefile ...

  8. js导入外部脚本文件

    JS 语言没找到导入外部脚本文件的功能,只能通知宿主程序来处理. function include(path){ var a=document.createElement("script&q ...

  9. construction of tuples containing 0 or 1 items

    [construction of tuples containing 0 or 1 items] the syntax has some extra quirks to accommodate the ...

  10. JDBC学习

    JDBC全称 Java DataBase Connectivity(java数据库连接)可以为多种数据库提供统一的访问: 步骤:1:加载驱动程序: 加载Mysql驱动:Class.forName(&q ...