本文介绍Servlet Context与Servlet Config的分析,以及介绍到该Servlet运行其中的这个背景对象的方法。

关于web容器来说,Servlet Context接口界说了一个Servlet环境目标,这个目标界说了一个在Servlet引擎上的Servlet的视图。经过运用这个目标,Servlet能够记载事情,得到资源并得到来自Servlet的引擎类。

Servlet的Context与Config(servlet context)  Servlet Context Config 第1张

Servlet容器在发动时会加载web运用,并为每个web运用创立仅有的Servlet Context目标,能够把Servlet Context看成是一个Web运用的服务器端组件的同享内存,在Servlet Context中能够寄存同享数据,他供给了4个读取和设置同享数据的办法。详细见api协助文档。

别的,Servlet Context目标只在web运用被封闭的时分才被毁掉,不同的web运用,Servlet Context各自独立存在。

一个web运用由jsp,Servlet,javabean等web组件的调集构成,每一个web运用,容器都会有一个布景目标,而javax.Servlet.Servlet Context接口就供给了拜访这个布景目标的途径。你能够经过一个Servlet实例的getServlet Context()办法得到该Servlet运转其间的这个布景目标,从这个布景目标中你能够拜访如下信息资源:
1.初始化参数
2.存储在布景中的目标
3.与布景相关的资源
4.日志

***针对Servlet Context我自己的总结是:
Servlet Context即Servlet容器,其内供给的办法能够在同一web运用下的一切Servlet中被运用,而关于Config目标来说,他与context比较,就有了很大的局限性。

当Servlet Config目标在Servlet中被实例化后,对任何客户端在任何时分拜访有用。可是一个Servlet的Servlet Config目标不能被另一个Servlet拜访,也便是说,在本Servlet声明后的Servlet Config只能在本Servlet内被拜访,归于内部耐久有用的变量。

下有一例,可供深刻理解:

一般来说,对整个运用的装备,为了不运用“硬编码”,应该装备为Servlet Context参数,比方字符集设定。

  1. <web-app>
  2. .................
  3. <init-param>
  4. <param-name>charset</param-name>
  5. <param-value>GB2312</param-value>
  6. </init-param>
  7. .................
  8. </web-app>

留意以上格局仅仅2。0今后的规范格局,旧容器(引擎)选用服务商自己的格局装备。留意它的父元素应该是<web-app>也便是说它是对一个运用效果的。

而假如只要一个特定的Servlet要设定的参数,其它Servlet不能同享,应该装备为Servlet Config参数,如一个读取附件的Servlet要用到肯定目录,而别的Servlet不会用到:

  1. <servlet>
  2. <servlet-name>GetAtt</servlet-name>
  3. <servlet-class>mail.GetAttServlet</servlet-class>
  4. <init-param>
  5. <param-name>absPath</param-name>
  6. <param-value>/usr/mail/ax/axman/Maildir/</param-value>
  7. </init-param>
  8. </servlet>

不用说,由于在<Servlet>标签中现已指定了name和class,也便是说只要mail.GetAttServlet这个\rServlet中才干取到path,而别的Servlet是不能取到的。

前面咱们讲了对这连个特点的知道,下面让咱们来一起学习一下,怎么获取这两个目标的参数:

拜访Servlet Config参数:
首先要获得Servlet Config目标,然后调用它的getInitParameter();办法。要拜访Servlet Config目标,jsp中直接运用config内置目标,但由于你的JSP编译后的Servlet一般不会被加到web.xml中的,所以一般不会经过jsp来取对本JSP编译后的Servlet的装备参数,那么在Servlet中要得到Servlet Config目标有两种办法:

在inii()办法中取到:经过init的重载办法传递

  1. .....
  2. publicclassTestextendsHttpServlet
  3. {
  4. ServletConfigconfig;
  5. publicvoidinit(ServletConfigconfig)throwsServletException{
  6. this.config=config;
  7. }
  8. ..................
  9. }

然后鄙人面的办法中就能够拜访config目标。但要留意,为了保证能从结构办法中到当时Servlet的config目标,应该调用父类的结构办法:

  1. .....
  2. publicclassTestextendsHttpServlet
  3. {
  4. ServletConfigconfig;
  5. publicvoidinit(ServletConfigconfig)throwsServletException{
  6. super.init(config);
  7. this.config=config;
  8. }
  9. ..................
  10. }

经过getServlet Config()办法直接届时,这样做的优点是不用调手艺传递特点,想在任何时分都可
以得到。

还有第三种办法,要自己完成一些接口,这儿作为一般评论就不介绍了。
要拜访Servlet Context目标,只要从现有的Servlet Config目标getServlet Context()就能够了,然后\r调用它的getInitParameter()办法就能够获取它的参数。

按说:Servlet Context目标的效果域比Servlet Config效果域大,为什么要从Servlet Config中到得Servlet Context目标呢?我个人认为:容器保存了很多个Servlet Context目标,恳求时容器究竟取哪一个\r给你呢?那就取其间包括Servlet Config信息的那个给你,便是说取Servlet Config目标的父级目标。就好象HttpSession要从requset中获得相同,便是取那个包括当时request目标的session目标给你,这仅仅我的个人主意,还没有来得及看详细完成。横竖就这么用吧。

【修改引荐】

  1. Servlet中的doFilter办法
  2. 装备Servlet过滤器
  3. 装置Servlet和JSP开发工具
  4. Java Servlet入门教程
  5. Servlet过滤器是什么
转载请说明出处
知优网 » Servlet的Context与Config(servlet context)

发表评论

您需要后才能发表评论