1,ServletContext阶段重点
1.1:简述及获取
相当于某个项目的身份证 :一个项目有一个ServletContext对象
作用:
获取项目配置信息
域对象(项目内信息传递与共享)
获取项目内资源信息
@WebServlet({"/d1"}) public class Demo1Servlet extends BaseServlet { public void run1(){ //默认情况下:项目中何处以何种方式获取到的ServletContext对象,都是同一个 ServletContext servletContext = getServletContext(); ServletContext servletContext2 = getServletConfig().getServletContext(); System.out.println(servletContext==servletContext2);//true } }
1.2:设置和获取全局初始化参数
设置全局初始化参数:
编辑
获取全局初始化参数:
servletContext.getInitParameter("name");//若获取的键值对不存在的,返回Null。存在返回
value字符串
Servlet:
public void run2(){ ServletContext servletContext = getServletContext(); System.out.println(servletContext.getInitParameter("encoding")); System.out.println(servletContext.getInitParameter("myname")); System.out.println("---------"); Enumeration<String> e = servletContext.getInitParameterNames(); while (e.hasMoreElements()){ System.out.println(e.nextElement()); } }
小结:
若某些键值对需要在任意Servlet中进行获取,把该键值对配置成全局初始化参数。
1.3:域对象
HttpServletRequest:在于请求转发。
相当于JavaSE中Map集合。
编辑
域对象的value值:都是Object类型。
//需求:run3 run4方法,run3存储键值对 ,run4读取键值对。 run3 和 run4没有关联 //request 和 ServletContext 传递数据 //reMsg = request //scMsg = ServletContext public String run3(){ getRequest().setAttribute("reMsg","request"); getServletContext().setAttribute("scMsg","ServletContext"); return null; } public String run4(){ System.out.println(getRequest().getAttribute("reMsg")); System.out.println(getServletContext().getAttribute("scMsg")); return null; }
request作用范围:一次请求和响应之间 (多次请求转发)
ServletContext作用范围:(服务器启动,ServletContext创建。服务器关闭,ServletContext销毁)
编辑
编辑
2,案例1:记录登录成功人数
编辑
关键点:
1、访问Servlet
2、ServletContext,在整个项目内进行数据共享、统计
流程:
编辑
代码实现:
login.jsp
<form class="form-horizontal" method="post" action="/day07_1/user"> <input type="hidden" name="method" value="login"/>
UserServlet
@WebServlet({"/user"}) public class UserServlet extends BaseServlet { public String login(){ //1、假设用户一定登录成功【无代码】 //2、登录成功人数统计 //2.1、尝试从ServletContext中获取count ServletContext servletContext = getServletContext(); Object count = servletContext.getAttribute("count"); //2.2、判断count是否为Null if(count==null){ //2.3、若为null,说明第一次统计,次数为1 servletContext.setAttribute("count",1); }else{ //2.4、若不为null,说明第N次统计,原来次数+1 servletContext.setAttribute("count",Integer.parseInt(count.toString())+1); } //3、跳转msg.jsp展示 return "forward:/msg.jsp"; } }
msg.jsp
<h1>您是第${count}位登录成功的用户!</h1>
小结:
Request作用域太小,导致无法给所有用户进行统计。
ServletContext作用域,可以在项目内部进行统计。