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域对象进行数据共享,只能用转发技术!!!