第五章:Web上下文

第1节:ServletContext接口


知识点1:上下文对象的概念、作用

1.什么是上下文对象

用来存储全局范围信息的对象,一个web应用只有唯一的一个上下文对象.

image java 上下文 什么是java上下文_java

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在应用中共享数据

与属性相关的方法

上下文的属性可以在整个应用中共享

image java 上下文 什么是java上下文_servlet_02

知识点2:四大作用域范围

在Web应用中,有四大作用域范围

1.页面范围(pageContext):一个页面,不能跨页面;

2.请求范围(request):一次请求中可以访问多个Servlet或JSP; 访问的Servlet或JSP能够包含其他资源;可以跨页面,必须使用请求转发带数据

3.会话范围:一次会话中可以包含多个请求;可以跨请求跨页面,使用请求转发和重定向都能带数据

4.上下文范围:上下文包含所有会话;可以跨会话跨请求跨页面,使用请求转发和重定向都能带数据

作用域范围由小到大:页面<请求<会话<上下文

image java 上下文 什么是java上下文_image java 上下文_03


知识点3:请求、会话、上下文中存放、修改、删除数据方法

请求接口、会话接口、上下文接口中都定义相同的方法,可以对数据进行存放、修改、删除

image java 上下文 什么是java上下文_image java 上下文_04


多数服务器中,都是使用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中