Servlet引擎装载并创建一个Servlet实例对象后,接着调用该实例对象的init(ServletConfig config)
方法将ServletConfig
对象传递给Servlet。ServletConfig对象封装了Servlet的配置和运行环境信息。
Servlet引擎、Servlet程序和ServletConfig对象之间的关系
Servlet程序只是相当于整个系统程序中的一个零部件,整个系统程序的主体框架(Servlet引擎)则已经由别人写好,Servlet程序是专供主体框架程序去调用的,主体框架程序负责读取配置文件,根据配置文件中的信息生成ServletCinfig对象,然后创建我们编写的Servlet类的实例对象,然后调用该实例对象的init方法将ServletConfig对象传递给该Servlet实例对象。
获取ServletConfig对象
前面讲过Servlet类的继承结构,GenericServlet实现了Servlet接口,我们自己编写的Servlet类继承自HttpServlet,HttpServlet继承自GenericServlet。
GenericServlet帮我们对了ServletConfig对象做了一些友好处理,以便在其子类中可以更好地使用ServletConfig对象(的相关配置信息),上代码,一目了然:
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
private static final long serialVersionUID = 1L;
private transient ServletConfig config;
public GenericServlet() {
}
public void destroy() {
}
public String getInitParameter(String name) {
return this.getServletConfig().getInitParameter(name);
}
public Enumeration<String> getInitParameterNames() {
return this.getServletConfig().getInitParameterNames();
}
public ServletConfig getServletConfig() {
return this.config;
}
public ServletContext getServletContext() {
return this.getServletConfig().getServletContext();
}
public String getServletInfo() {
return "";
}
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
从代码可以看出,对于一些需要通过ServletConfig对象访问的信息,GenericServlet类为我们做了优化处理,可以直接调用,如getServletContext()
,getInitParameterNames()
等。
transient修饰符
我们知道一个类只要实现了Serilizable接口,这个类的所有属性和方法就会被自动序列化。但是有时候,我们不希望某些敏感信息(如密码、银行卡号等)在网络操作(主要涉及序列化操作、本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient
关键字。换句话说,这个字段的生命周期存于调用者的内存中而不会被写到磁盘里持久化。
在web.xml文件配置Servlet相关信息
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>HelloServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>Zhangsan</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>26</param-value>
</init-param>
</servlet>
在web.xml中配置初始化参数,通过GenericServlet中的相关方法即可获取。
参考:
https://blog.csdn.net/Next_Second/article/details/52665288
张孝祥《Java Web基础》