mvc-servlet---servletContext与servletConfig2
在编写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对象,请看下面代码:
- import javax.servlet.ServletConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServlet;
- public class Servlet1 extends HttpServlet{
- @Override
- public void init() throws ServletException
- {
- ServletConfig config = this.getServletConfig();
- System.out.println("Servlet1 config=="+config);
- System.out.println("Servlet1 间接获取context==" +config.getServletContext() );
- System.out.println("Servlet1 直接获取context==" + this.getServletContext());
- System.out.println("Servlet1 param_value==" + config.getInitParameter("servlet1_param_name"));
- System.out.println("context_value==" + this.getServletContext().getInitParameter("context_param"));
- System.out.println("*********************************");
- }
- @Override
- public void service(ServletRequest req, ServletResponse resp)
- throws ServletException{
- }
- @Override
- public void destroy() {
- }
- }
Servlet2的代码:
- import javax.servlet.ServletConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServlet;
- public class Servlet2 extends HttpServlet {
- @Override
- public void init() throws ServletException
- {
- ServletConfig config = this.getServletConfig();
- System.out.println("Servlet2 config=="+config);
- System.out.println("Servlet2 间接获取context==" +config.getServletContext());
- System.out.println("Servlet2 直接获取context==" + this.getServletContext());
- System.out.println("Servlet2 param_value==" + config.getInitParameter("servlet2_param_name"));
- System.out.println("context_value==" + this.getServletContext().getInitParameter("context_param"));
- System.out.println("*********************************");
- }
- @Override
- public void service(ServletRequest req, ServletResponse resp)
- throws ServletException{
- }
- @Override
- public void destroy() {
- }
- }
web.xml文件的配置:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4"
- xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <servlet>
- <servlet-name>servlet_1</servlet-name>
- <servlet-class>com.test.servlet.Servlet1</servlet-class>
- <init-param>
- <param-name>servlet1_param_name</param-name>
- <param-value>value1</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet>
- <servlet-name>servlet_2</servlet-name>
- <servlet-class>com.test.servlet.Servlet2</servlet-class>
- <init-param>
- <param-name>servlet2_param_name</param-name>
- <param-value>value2</param-value>
- </init-param>
- <load-on-startup>0</load-on-startup>
- </servlet>
- <context-param>
- <param-name>context_param</param-name>
- <param-value>value3</param-value>
- </context-param>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </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的更多相关文章
- 【原】tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决
现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...
- 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 ...
- paip.spring3 mvc servlet的配置以及使用最佳实践
paip.spring3 mvc servlet的配置以及使用最佳实践 1. Web.xml 1 2. springMVC.xml 2 1. mvcAction .mvcAction 2 2. Res ...
- java.lang.NoClassDefFoundError: javax/servlet/ServletContext
方法1:把SpringBoot中main方法所在的class不再继承org.springframework.boot.context.web.SpringBootServletInitializer即 ...
- tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决
现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...
- SpringBoot报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
错误:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String ...
- Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;
运行tomat 报错: Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Lj ...
- 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 ...
- Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext
Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext 场景描述 项目中用到spring boo ...
- java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;
问题描述:在eclipse3.7中启动tomcat6时一直出现这个错误, java.lang.NoSuchMethodError: javax.servlet.ServletContext.getCo ...
随机推荐
- 使用PHP导入和导出CSV文件
我们先准备mysql数据表,假设项目中有一张记录学生信息的表student,并有id,name,sex,age分别记录学生的姓名.性别.年龄等信息. CREATE TABLE `student` ( ...
- C# 将DataTable存储到DBF文件中
(准备)生成一个DataTable /// <summary> /// 生成一个数据表 /// </summary> /// <returns></retur ...
- 2016.02.17 JS DOM编程艺术 第四五六章
看完这三章内容,集中精力,加快速度.
- 从Unity引擎过度到Unreal4引擎(最终版)
原文地址:http://demo.netfoucs.com/u011707076/article/details/44036839 前言 寒假回家到现在已经有十多天了,这些天回家不是睡就是吃....哎 ...
- [转载] Android中Xposed框架篇---利用Xposed框架实现拦截系统方法
本文转载自: http://www.wjdiankong.cn/android%E4%B8%ADxposed%E6%A1%86%E6%9E%B6%E7%AF%87-%E5%88%A9%E7%94%A8 ...
- [2015hdu多校联赛补题]hdu5299 Circles Game
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5299 题意: 在欧几里得平面上有n个圆,圆之间不会相交也不会相切,现在Alice和Bob玩游戏,两人轮 ...
- 从 Eclipse 导入项目到 Android Studio
ADT已经有些过时了,现在比较流行的安卓开发工具是Android Studio,毕竟是谷歌一直在推广的. 最近装了as,从之前的adt迁移项目到as上,遇到了不少坎. 主要注意以下两点: (1)文件路 ...
- android 编译错误 com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0
解决方案一: JDK版本不一致造成的,指的是高版本的JDK编译的class不能放在低版本的JDK上运行. 如果是Version 52,就表示JDK8编译的class不能运行在JDK7上,所以需要在本地 ...
- Andorid开发学习---ubuntu 12.04下搭建超好用的安卓模拟器genymotion 安装卸载virtualbox 4.3
什么是Genymotion? Genymotion是一套完整的工具,它提供了Android虚拟环境.它简直就是开发者.测试人员.推销者甚至是游戏玩家的福音. Genymotion支持Windows.L ...
- 自动布局之autoresizingMask
UIViewAutoresizing是一个枚举类型,默认是UIViewAutoresizingNone,也就是不做任何处理. 1 2 3 4 5 6 7 8 9 typedef NS_OPTIONS( ...