第五章:Web上下文
第1节:ServletContext接口
知识点1:上下文对象的概念、作用
1.什么是上下文对象
用来存储全局范围信息的对象,一个web应用只有唯一的一个上下文对象.
2.上下文对象的作用
存储全局共享的数据
3.上下文对象的创建时机
服务器启动的时候,为每一个web应用创建一个上下文对象
4.上下文对象的销毁时机
服务器关闭的时候,上下文对象就销毁了.
5.上下文对象的接口
ServletContext接口
6.上下文接口 的方法
知识点2:上下文获取方法
1.getServletContext()就能获取上下文对象
实际上调用的是GenericServlet的getServletContext()方法
得到的对象是:org.apache.catalina.core.ApplicationContextFacade@4b6a780f
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上下文对象
ServletContext servletContext = getServletContext();
//打印
System.out.println(servletContext);
response.getWriter().append("Served at: ").append(request.getContextPath());
}
知识点3:上下文参数
1.上下文参数的配置
web.xml的配置 上下文参数
<context-param>
<param-name>company</param-name>
<param-value>中软国际科技有限公司</param-value>
</context-param>
2.如何得到上下文参数的值
上下文对象.getInitParameter(name)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上下文对象
ServletContext servletContext = getServletContext();
//打印
System.out.println(servletContext);
//得到上下文参数的值
String company = servletContext.getInitParameter("company");
//打印上下文参数的值
System.out.println(company);
response.getWriter().append("Served at: ").append(request.getContextPath());
}
知识点4:使用注解配置Servlet初始化参数
Servlet3.0规定开始就可以使用注解配置servlet
在servlet类上添加注解:
@WebServlet(urlPatterns="/HelloServlet",initParams= {@WebInitParam(name=“name”,value=“zs”)})
相当于web.xml中:
<servlet>
<description></description>
<display-name>HelloServlet</display-name>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.tjetc.servlet.HelloServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>zs</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
第二节:数据作用域
知识点1:利用ServletContext在应用中共享数据
与属性相关的方法
上下文的属性可以在整个应用中共享
知识点2:四大作用域范围
在Web应用中,有四大作用域范围
1.页面范围(pageContext):一个页面,不能跨页面;
2.请求范围(request):一次请求中可以访问多个Servlet或JSP; 访问的Servlet或JSP能够包含其他资源;可以跨页面,必须使用请求转发带数据
3.会话范围:一次会话中可以包含多个请求;可以跨请求跨页面,使用请求转发和重定向都能带数据
4.上下文范围:上下文包含所有会话;可以跨会话跨请求跨页面,使用请求转发和重定向都能带数据
作用域范围由小到大:页面<请求<会话<上下文
知识点3:请求、会话、上下文中存放、修改、删除数据方法
请求接口、会话接口、上下文接口中都定义相同的方法,可以对数据进行存放、修改、删除
多数服务器中,都是使用Map对象来实现不同范围的属性
知识点4:页面作用域范围
(1)pageContex.setAttribute(name,value)
(2)当前页面pageContext.getAttribute(name)
(3)请求转发到page2.jsp,pageContext.getAttribute(name)
<%
//向页面作用域添加属性和值
pageContext.setAttribute("name", "lisi");
request.getRequestDispatcher("/page2.jsp").forward(request, response);
// response.sendRedirect(request.getContextPath()+"/page2.jsp");
%>
<%=pageContext.getAttribute("name")%>
结果:
null
知识点5:请求作用域范围
(1)request.setAttribute(name,value)
(2)当前页面request.getAttribute(name)
(3)请求转发到page2.jsp,request.getAttribute(name)
<%
//向页面作用域添加属性和值
// pageContext.setAttribute("name", "lisi");
//request作用域添加属性和值
request.setAttribute("name", "lisi");
request.getRequestDispatcher("/page2.jsp").forward(request, response);
// response.sendRedirect(request.getContextPath()+"/page2.jsp");
%>
<%=request.getAttribute("name")%>
结果:
lisi
知识点6:上下文作用域范围
(1)application.setAttribute(name,value)
(2)当前页面application.getAttribute(name)
(3)请求转发或者重定向到page2.jsp,application.getAttribute(name)
<%
//向页面作用域添加属性和值
// pageContext.setAttribute("name", "lisi");
//request作用域添加属性和值
// request.setAttribute("name", "lisi");
//session作用域添加属性和值
// session.setAttribute("name", "wangwu");
//上下文作用域添加属性和值
application.setAttribute("name", "zhaoliu");
request.getRequestDispatcher("/page2.jsp").forward(request, response);
// response.sendRedirect(request.getContextPath()+"/page2.jsp");
%>
<%=application.getAttribute("name")%>
结果:
zhaoliu
第三节:ServletConfig接口
知识点1:得到servletConfig对象
getServletConfig()得到servletConfig对象
知识点2:getServletName()
servletConfig对象.getServletName()得到Servlet的名称
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 得到ServletConfgi对象
ServletConfig servletConfig = getServletConfig();
//得到servlet名称
String servletName = servletConfig.getServletName();
//打印
System.out.println(servletName);
response.getWriter().append("Served at: ").append(request.getContextPath());
}
TestConfigServlet
知识点3:getServletContext()得到ServletContext对象
//得到上下文对象
ServletContext servletContext = servletConfig.getServletContext();
//打印
System.out.println(servletContext);
org.apache.catalina.core.ApplicationContextFacade@18bf2c41
知识点4:getInitParameter(name)得到servlet的初始化参数
//得到servlet的初始化参数
String name = servletConfig.getInitParameter("name");
System.out.println(name);
第四节:ServletConfig与ServletContext的区别
1.ServletConfig是针对只有一个特定的servlet的局部变量,
2.ServletContext是整个web application的全局变量ServletContext存放在ServletConfig中