JSP基础--ServletContext
是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。
1、初始化类
package com.jsp;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
public class InitServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
System.out.println("I am initServlet!");
// 系统启动时,把一些信息放入ServletContext中供所有servlet共享
// 获取上下文对象
ServletContext application = this.getServletContext();
// 将一些系统字典放入一个对象,供系统使用
//以下程序,在系统启动时就会执行
List<String> dictList = new ArrayList<>();
String name1 = "aa";
String name2 = "bb";
String name3 = "cc";
dictList.add(name1);
dictList.add(name2);
dictList.add(name3);
application.setAttribute("dictList", dictList);
List<String> list = (List<String>) application.getAttribute("dictList");
for (String string : list) {
System.out.println(string);
}
// 创建一个空对象,存储用户的在线记录,当每次访问(loginServlet),就在这个对象加1
List<String> userList = new LinkedList<>();
application.setAttribute("userList", userList);
}
}
2、在web.xml中注册
<!-- InitServlet的配置 -->
<servlet>
<servlet-name>initServlet</servlet-name>
<servlet-class>com.jsp.InitServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
3、在其他servlet中,取ServletContext的值
在helloservlet类中
ServletContext application = this.getServletContext();
List<String> list = (List<String>) application.getAttribute("dictList");
for (String string : list) {
System.out.println("hello=>"+string);
}
访问这个helloservlet的时候,可以取到值