首页 > 代码库 > Java之旅(二)--- ServletContext
Java之旅(二)--- ServletContext
什么是ServletContext?
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。通过使用这个对象,servlet可以记录事件,得到资源并得到来自servlet的引擎类。
可以把ServletContext看成是一个Web应用的服务器端组件的共享内存,在ServletContext中可以存放共享数据。
另外,ServletContext对象只在web应用被关闭的时候才被销毁,不同的web应用,ServletContext各自独立存在。
最后总结来说:ServletContext即servlet容器,其内提供的方法可以在同一web应用下的所有servlet中被使用,它就是一个全局变量。
如何获取ServletContext?
容器初始化一个servlet时,会为这个servlet建一个唯一的ServletConfig。容器从DD(web.xml)中读出Servlet初始化参数,并把这些参数交给ServletConfig,然后把ServletConfig传递给servlet的init(ServletConfig config)方法。也就是说容器只有在创建servlet实例时才会读DD文件中的init-param,并且在servlet一生只读一次。ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
如何利用ServletContext实现数据共享?
(1)通过ServletContext对象:
在InitServlet的Service方法中利用ServletContext对象存入需要共享的数据。
/*获取ServletContext对象*/ ServletContext context = this.getServletContext(); //存入共享的数据 context.setAttribute("name", "haha");
在其它的Servlet中利用ServletContext对象获取共享的数据。
/*获取ServletContext对象*/ ServletContext context = this.getServletContext(); //获取共享的数据 String name = context.getAttribute("name"); System.out.println("共享的内容值是:"+name);
(2)通过web.xml初始化参数
<web-app> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/4g</param-value> </context-param> </web-app>
在Servlet的doPost方法中测试获取初始化参数的步骤如下:
/*获取ServletContext对象*/ ServletContext context = this.getServletContext(); /*获取指定名称的初始化参数*/ String url = context.getInitParameter("url");
如何利用ServletContext实现转发?
这里面就涉及到转发方法的选择,那么究竟forward和include有何区别呢?可以说,forward方法是把请求的内容转发到另外的一个servlet;而include是把另一个servlet处理过后的内容拿过来。下面通过一个非常简单易懂的例子来说明吧。
举例来说比如在servlet1打一句out.print("我是Servlet1"),servlet2打上out.print("我是Servlet2")。(1)使用forward方法:在servlet1中用forward命令会转到servlet2中,结果会是“我是Servlet2”;
(2)使用include方法:而在servlet1中使用include方法会依然在servlet1的页面中,但是在输出“我是Servlet1”后继续输出“我是Servlet2”。
/*要利用ServletContext对象实现转发获取对象*/ ServletContext context = this.getServletContext(); //在request对象中存入name属性 request.setAttribute("name", "haha"); /*根据转发的地址获取 RequestDispatcher对象*/ RequestDispatcher rd = context.getRequestDispatcher("/index.jsp"); //调用转发方法 以下采用任意方法即可 rd.forward(request, response); //rd.include(request, response);
关于ServletContext先说这么多,你了解它了吗?
Java之旅(二)--- ServletContext