Preface:
今天在学习ServletConfig接口时看到书上说:
在Servlet3.0中,可以用@WebServlet注解来在当前Servlet范围内设置初始值.
于是开始突发奇想,那么在Servlet3.0中,可以用WebServlet注解给Web容器设置共享的初始化参数吗?
Analysis:
既然想到了这个问题,那么就一定要搞明白它.
首先我们先来复习一下与此相关的Servlet知识
ServletContext:
ServletContext表示Web应用的上下文,ServletContext对象可以被Servlet容器中的所有Servlet共享.
它有一个方法 public String getInitParameter(String name) 是用来在整个Web容器中,获取名为name的初始化参数
其初始化参数的取值范围为整个Web容器
ServletConfig:
ServletConfig对象可以在Servlet初始化时,向该Servlet传递信息.
而且它也有一个方法 public String getInitParameter(String name) 是用来在当前项目的所有Servlet范围内,获取名为name的初始化参数
其初始化参数的取值范围为当前项目的所有Servlet范围
那么再看在Servlet3.0中的关于@WebServlet注解的定义
这里已经被明确规定
在Servlet3.0中: 可以用@WebServlet注解来在当前Servlet范围内设置初始值.
没有说可以在Web容器范围内可以设置共享的初始值.
上面是官方的说法,下面是我个人的理解
首先,我们来看一下@WebServlet注解的位置
可以看到@WebServlet注解是在Servlet里面的
那么其范围当然只能在当前Servlet范围内设置初始值
就比如在一个方法内,我们只能定义一个局部变量初始化
而不能在该方法内定义一个全局变量
综上所述
我们不能够用@WebServlet注解给Web容器设置共享的初始化参数