servletConfig和servletContext的区别:
servletContext 是服务器启动的时候会给每一个工程创建一个唯一的servletContext实例,是web.xml 在内存的体现和web工程一一对应。
servletConfig 则是保存着每一个servlet的配置信息,每一个servlet都有一个自己的servletConfig。
web.xml文件
<!-- Spring和mybatis的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mybatis.xml</param-value>
</context-param>
<context-param>
<param-name>name</param-name>
<param-value>xiaowang</param-value>
</context-param>
<servlet>
<servlet-name>servletTest1</servlet-name>
<servlet-class>demo.com.cn.ssm.servlet.ServletTest1</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>zx</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servletTest1</servlet-name>
<url-pattern>/servletTest1</url-pattern>
</servlet-mapping>
Servlet
public class ServletTest1 extends HttpServlet{
/** */
private static final long serialVersionUID = 1306369213240944622L;
private ServletConfig servletConfig;
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("初始化 servlet实例");
this.servletConfig = servletConfig;
}
@Override
public void service(HttpServletRequest req,HttpServletResponse rsp) {
rsp.setCharacterEncoding("UTF-8");
rsp.setHeader("content-type","text/html;charset=UTF-8");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String date = sdf.format(new Date());
PrintWriter writer = null;
try {
writer = rsp.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
writer.println("当前日期为:"+date);
writer.println("<hr/>");
String userName = servletConfig.getInitParameter("username");
String passWord = servletConfig.getInitParameter("password");
writer.println("servletConfig initParam: userName["+userName+"] password["+passWord+"]");
writer.println("<hr/>");
ServletContext servletContext = servletConfig.getServletContext();
String name = servletContext.getInitParameter("name");
String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation");
System.out.println(contextConfigLocation);
writer.println("servletContext : name["+name+"]");
writer.println("<br/>");
writer.println("contextConfigLocation : contextConfigLocation["+contextConfigLocation+"]");
writer.flush();
writer.close();
}
@Override
public void doGet(HttpServletRequest req,HttpServletResponse rsp) throws ServletException, IOException{
System.out.println("doGet ~~~");
PrintWriter writer = rsp.getWriter();
writer.println("hello");
writer.flush();
writer.close();
}
@Override
public void destroy() {
System.out.println("销毁 servlet实例");
}
}
当servlet配置了初始化参数的时候,web容器会在servlet初始化的时候将配置封装在servletConfig中并在作为参数传入init方法,我们需要在init方法中接受并赋值,servletConfig可以接受局部参数也就是servlet标签内的,servletContext可以接受servlet标签之外的配置参数。
servletContext 是一个作用域对象,它的生命周期是整个容器的生命周期。