ServletContext对象

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()  用在请求重定向的资源名称中

   
   
  1. package com.cn.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.util.Enumeration;
  5. import javax.servlet.ServletConfig;
  6. import javax.servlet.ServletContext;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. public class ServletContextDemo extends HttpServlet {
  12. public void doGet(HttpServletRequest request, HttpServletResponse response)
  13. throws ServletException, IOException {
  14. /*
  15. * 得到ServletContext对象
  16. */
  17. // ServletContext context = this.getServletConfig().getServletContext();
  18. ServletContext context = this.getServletContext();
  19. /*
  20. * 得到web应用路径 /myweb
  21. * web应用路径:部署到tomcat服务器上运行的web应用名称。即项目名称。
  22. */
  23. String contextPath = context.getContextPath();
  24. System.out.println("contextPath->" + contextPath);
  25. response.getWriter().write("hello , this project name is " + contextPath);
  26. /**
  27. * 案例:应用到请求重定向
  28. * 假如项目名称改变,需要修改下面代码中的项目名称,很麻烦。
  29. */
  30. // response.sendRedirect("/myweb/index.jsp");
  31. // response.sendRedirect(contextPath + "/ServletContextDemo2?myname=liuzhiyong");
  32. Enumeration<String> initParameterNames = this.getServletContext().getInitParameterNames();
  33. while(initParameterNames.hasMoreElements()){
  34. String parameterName = initParameterNames.nextElement();
  35. String parameterValue = this.getServletContext().getInitParameter(parameterName);
  36. System.out.println("parameterName:" + parameterValue);
  37. }
  38. String pathName = this.getServletConfig().getInitParameter("path");
  39. System.out.println("pathName:" + pathName);
  40. this.getServletContext().setAttribute("myname", "木丁西");
  41. this.getServletContext().setAttribute("age", 22);
  42. this.getServletContext().setAttribute("salary", 33.339);
  43. Student student = new Student();
  44. student.setName("刘先森");
  45. student.setAge(18);
  46. student.setSalary(20000);
  47. this.getServletContext().setAttribute("student", student);
  48. }
  49. }

5.得到web应用的初始化参数(全局) 
java.lang.String getInitParameter(java.lang.String name)  --得到web应用的初始化参数
java.util.Enumeration getInitParameterNames()  

注意:web应用参数可以让当前web应用的所有servlet获取!!!
   
   
  1. package com.cn.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.RequestDispatcher;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. public class ServletContextDemo2 extends HttpServlet {
  10. public void doGet(HttpServletRequest request, HttpServletResponse response)
  11. throws ServletException, IOException {
  12. /*
  13. * 得到web应用的初始化参数
  14. */
  15. String myname = this.getServletContext().getInitParameter("myname");
  16. System.out.println("myname:" + myname);
  17. String myname2 = (String)this.getServletContext().getAttribute("myname");
  18. int age = (Integer)this.getServletContext().getAttribute("age");
  19. double salary = (Double)this.getServletContext().getAttribute("salary");
  20. System.out.println(myname2 + "-" + age + "-" + salary);
  21. Student stu = (Student)this.getServletContext().getAttribute("student");
  22. System.out.println(stu);
  23. }
  24. }

6.域对象有关的方法
域对象:作用是用于保存数据,获取数据。可以在不同的动态资源之间共享数据。
              
方案1: 可以通过传递参数的形式,共享数据。局限:只能传递字符串类型。
方案2: 可以使用域对象共享数据,好处:可以共享任何类型的数据!!!!!

注意:ServletContext就是一个域对象!!!!

保存数据:void setAttribute(java.lang.String name, java.lang.Object object)
获取数据: java.lang.Object getAttribute(java.lang.String name)  
删除数据: void removeAttribute(java.lang.String name)  

ServletContext域对象:作用范围在整个web应用中有效!!!

所有域对象:
HttpServletRequet 域对象
ServletContext域对象
HttpSession 域对象
PageContext域对象,属于jsp中的内置对象

7.转发
 RequestDispatcher this.getServletContext().getRequestDispatcher(java.lang.String path).forward(request, response);

1)转发
 a)地址栏不会改变
 b) 转发只能转发到当前web应用内的资源
c)可以在转发过程中,可以把数据保存到request域对象中

2)重定向
a)地址栏会改变,变成重定向到地址。
b) 重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。
c)不能在重定向的过程,把数据保存到request中。

结论: 如果要使用request域对象进行数据共享,只能用转发技术!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值