ServletContext对象
 
1.引入
 
ServletContext对象 ,叫做Servlet的上下文对象。表示一个当前的web应用环境。一个web应用中只有一个ServletContext对象。
 
 
2.对象创建和得到
 
创建时机:加载web应用时创建ServletContext对象。
 
得到对象: 从ServletConfig对象的getServletContext方法得到
 
 
3.ServletContext对象的核心API(作用)
 
 
得到web应用路径:
context.getContextPath();得到当前web应用的路径,部署到tomcat服务器上运行的web应用名称。即项目名称。
request.getContextPath(); 等价于上面的代码
得到web应用参数:
context.getInitParameter("name");
context.getInitParameterNames();
域对象:
context.setAttribute("name",Object): 保存数据
context.getAttribute("name") 得到数据
context.removeAttribue("name") 清除数据
转发
context.getRequestDispatcher("路径").forward(request,response);
request.getRequestDispacher("路径").forward(request,response); 等价于上面的代码
得到web应用中的资源文件
context.getRealPath("路径")
context.getResourceAsStream("路径");
 
4.得到web应用路径
 
java.lang.String getContextPath() 用在请求重定向的资源名称中
 
 
package com.cn.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.Enumeration;import javax.servlet.ServletConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletContextDemo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)     throws ServletException, IOException {    /*     * 得到ServletContext对象    *///   ServletContext context = this.getServletConfig().getServletContext();   ServletContext context = this.getServletContext();        /*     * 得到web应用路径    /myweb     * web应用路径:部署到tomcat服务器上运行的web应用名称。即项目名称。    */   String contextPath = context.getContextPath();        System.out.println("contextPath->" + contextPath);   response.getWriter().write("hello , this project name is " + contextPath);        /**    * 案例:应用到请求重定向     * 假如项目名称改变,需要修改下面代码中的项目名称,很麻烦。    *///   response.sendRedirect("/myweb/index.jsp");//    response.sendRedirect(contextPath + "/ServletContextDemo2?myname=liuzhiyong");        Enumeration<String> initParameterNames = this.getServletContext().getInitParameterNames();    while(initParameterNames.hasMoreElements()){      String parameterName = initParameterNames.nextElement();      String parameterValue = this.getServletContext().getInitParameter(parameterName);     System.out.println("parameterName:" +  parameterValue);   }       String pathName = this.getServletConfig().getInitParameter("path");   System.out.println("pathName:" + pathName);   this.getServletContext().setAttribute("myname", "木丁西");   this.getServletContext().setAttribute("age", 22);   this.getServletContext().setAttribute("salary", 33.339);        Student student = new Student();    student.setName("刘先森");   student.setAge(18);   student.setSalary(20000);       this.getServletContext().setAttribute("student", student);  }}
 
 
5.得到web应用的初始化参数(全局)
 
java.lang.String getInitParameter(java.lang.String name) --得到web应用的初始化参数
 
java.util.Enumeration getInitParameterNames()
 
 
注意:web应用参数可以让当前web应用的所有servlet获取!!!
 
package com.cn.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletContextDemo2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)     throws ServletException, IOException {        /*     * 得到web应用的初始化参数     */   String myname = this.getServletContext().getInitParameter("myname");    System.out.println("myname:" + myname);           String myname2 = (String)this.getServletContext().getAttribute("myname");   int age = (Integer)this.getServletContext().getAttribute("age");    double salary = (Double)this.getServletContext().getAttribute("salary");        System.out.println(myname2 + "-" + age + "-" + salary);       Student stu = (Student)this.getServletContext().getAttribute("student");    System.out.println(stu);      } } 
 
6.域对象有关的方法
 
域对象:作用是用于保存数据,获取数据。可以在不同的动态资源之间共享数据。
 
 
方案1: 可以通过传递参数的形式,共享数据。局限:只能传递字符串类型。
 
方案2: 可以使用域对象共享数据,好处:可以共享任何类型的数据!!!!!
 
 
注意:ServletContext就是一个域对象!!!!
 
 
 
获取数据: java.lang.Object getAttribute(java.lang.String name)
 
删除数据: void removeAttribute(java.lang.String name)
 
 
ServletContext域对象:作用范围在整个web应用中有效!!!
 
 
所有域对象:
 
HttpServletRequet 域对象
 
ServletContext域对象
 
HttpSession 域对象
 
PageContext域对象,属于jsp中的内置对象
 
 
7.转发
 
 
 
1)转发
 
 
b) 转发只能转发到当前web应用内的资源
 
c)可以在转发过程中,可以把数据保存到request域对象中
 
 
2)重定向
 
a)地址栏会改变,变成重定向到地址。
 
b) 重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。
 
c)不能在重定向的过程,把数据保存到request中。
 
 
结论: 如果要使用request域对象进行数据共享,只能用转发技术!!!
 









