`

servlet 容器详解(转载自:http://www.tuicool.com/articles/jI7VVb)

    博客分类:
  • j2ee
 
阅读更多

一、ServletContext详解 
ServletContext是servlet与servlet容器之间的直接通信的接口。Servlet容器在启动一个Web应用时,会为它创建一个servletContext对象。每个web应用有唯一的servletContext对象。同一个web应用的所有servlet对象共享一个serveltContext,servlet对象可以通过它来访问容器中的各种资源。 
servletContext接口提供的方法分为以下几种类型: 
用于在Web应用范围内存取共享数据的方法。 
注:web应用范围具有以下两层含义: 
(1) 表示有web应用的生命周期构成的时间段. 
(2) 表示在web应用的生命周期内所有web组件的集合。 
 setAttribute(String name,java.lang.Object object):把一个java对象和一个属性名绑定,并存放到ServletContext中,参数name指定属性名,参数Object表示共享数据。 
 getAttribute(String name):根据参数给定的属性名,返回一个Object类型的对象。 
 getAttributeNames():返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的属性名。 
 removeAttribute(String name):根据参数指定的属性名,从servletContext对象中删除匹配的属性。 
访问当前Web应用的资源 
 getContextpath():返回当前web应用的URL入口。 
 getInitParameter(String name):返回web应用方位内的匹配的初始化参数值。在web.xml中<web-app>元素中<context-param>元素表示应用范围内的初始化参数。 
 getInitParameterNames():返回一个Enumeration对象。 
 getServletContextName():返回web应用的名字。即<web-app>元素中<display-name>元素的值。 
 getRequestDispatcher(String path):返回一个用于向其他web组件转发请求的RequestDispatcher对象。 
访问servlet容器的相关信息 
 getContext(String uripath):根据参数指定的url,返回当前servlet容器中其他web应用的servletContext()对象。 
反问web容器的相关信息 
 getMajorVersion():返回servlet容器支持的java servlet API 的主板本号。 
 getMinorVersion():返回servlet容器支持的java Servlet API的此版本号。 
 getServerInfo():返回servlet容器的名字和版本。 
访问服务器端的文件系统资源 
 getRealPath(String path):根据参数指定的虚拟路径,返回文件系统中的一个真实的路径。 
 getResource(String path):返回一个映射到参数指定的路径的url。 
 getResourceAsStream(String path):返回一个用于读取参数指定的文件的输入流。(把文件读到输入流中去) 
 getMimeType(String file):返回参数指定的文件的MIME类型。 
输出日志 
 log(String msg):想servlet的日志文件中写日志。 
 log(String message, java.lang.Throwable   throwable):向servlet的日志文件中写错误日志,以及异常的堆栈信息。 
ServletContext对象获得几种方式: 
       Javax.servlet.http.HttpSession.getServletContext()  
       Javax.servlet.jsp.PageContext.getServletContext()  
       Javax.servlet.ServletConfig.getServletContext()

二、ServletConfig详解 
Servlet容器初始化一个servlet对象时,会为这个servlet对象创建一个servletConfig对象。在servletConfig对象中包含了servlet的初始化参数信息。此外,servletConfig对象还与servletContext对象关联。Servlet容器在调用servlet对象的init(ServletConfig config)方法时,会把servletConfig对象当做参数传递给servlet对象。Init(ServletConfig config)方法会使得当前servlet对象与servletConfig对象建立关联关系。 
servletConfig接口中定义了一下方法: 
 getInitParameter(String   name):根据给定的初始化参数,返回匹配的初始化参数值。 
 getInitParameterNmes():返回一个Enumeration对象,里面包含了所有的初始化参数。 
 getServletContext():返回一个servletContext()对象, 
 getServltName():返回servlet的名字,即web.xml中的<servlet-name>的子元素的值。如果没有配置这个子元素,则返回servlet类的名字。 
例子: 
<servlet> 
<servlet-name>actionServlet</servlet-name> 
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 
<load-on-startup>0</load-on-startup> 
<init-param> 
   <param-name>color</param-name> 
   <param-value>red</param-value> 
</init-param> 
<init-param> 
   <param-name>size</param-name> 
   <param-value>16</param-value> 
</init-param> 
</servlet> 
<servlet-mapping> 
<servlet-name>actionServlet</servlet-name> 
<url-pattern>*.do</url-pattern> 
</servlet-mapping> 
如上,红色标记处为初始化参数,相当于公有参数。 
在servlet中:

public class UserDateBaseServlet extends HttpServlet{ 
String color = this.getInitParameter("color"); 
String size = this.getInitParameter("size"); 
System.out.println("颜色是:"+color+"字号是:"+size); 

注:HttpServlt类继承了GenericServlet类,而GenericServlet类实现了ServletConfig接口,因此在HttpServlet类和GenericServlet类及子类中都可以直接调用ServletConfig接口中的方法。

三、二者区别 
在看web.xml配置文件关于环境初始化参数的配置时,发现了ServletConfig与ServletContext这两个对象的应用,于是就写了一个Servlet来体验了一下。

首先从作用范围来说,ServletConfig作用于某个特定的Servlet,即从该Servlet实例化,那么就开始有效,但是该Servlet之外的其他Servlet不能访问;ServletContext作用于某个web应用,即在一个web应用中相当于一个全局对象,在Servlet容器启动时就已经加载,对于不同的web应用,有不同的ServletContext。

其次,来看一下二者参数的使用。如果一个参数为整个web应用所用,那么就配置为ServletContext参数,如下所示:

<context-param> 
   <param-name>encoding</param-name> 
   <param-value>gb2312</param-value> 
</context-param>

如果一个参数仅为一个Servlet所用,那么就应该配置为ServletConfig参数,如下所示:

<servlet> 
   <servlet-name>affice_add</servlet-name> 
   <servlet-class>servlet.Affice_add</servlet-class> 
   <init-param> 
      <param-name>filepath</param-name> 
     <param-value>/webContent/affice</param-value> 
   </init-param> 
</servlet>

最后,说明一下参数的获取。访问ServletConfig参数,取得ServletConfig对象后,调用getInitParameter()方法;访问ServletContext对象,只要调用现有的ServletConfig对象的getServletContext()即可,然后同样调用getInitParamter()方法就能获取参数。例如对于上面的参数,可以通过如下方法获取各自参数。

public class TestServletConfig extends HttpServlet { 
   ServletConfig config;

   public void init(ServletConfig config) { 
       this.config=config; 
   }

   public void doGet(HttpServletRequest request,HttpServletResponse response) 
          throws ServletException,IOException { 
       String filepath=(String)config.getInitParameter("filepath"); 
       System.out.println(filepath); 
       String encode=(String)config.getServletContext().getInitParameter("encoding"); 
       System.out.println(encode); 
   }

   public void destroy() { 
   } 

对上面Servlet编译后,在浏览器中输入 http://localhost:8080/my/TestServletConfig (该链接地址与servlet在webx.xml中的配置有关)后,就可以分别对应输出/WebContent/affice和gb2312

分享到:
评论

相关推荐

    jQuery ajax 多级联动 下拉框 Demo

    博文地址 http://www.cnblogs.com/cl-blogs/p/4708102.html?utm_source=tuicool&utm_medium=referral ajax 实现 (全国,省,是,区....) N级联 Demo js: &lt;script type="text/javascript"&gt; $(function () { $.fn....

    indexer-cli-5.1.1.jar-maven 索引解压工具

    解压办法见http://www.tuicool.com/articles/B7BzMj

    Arduino控制多彩LED灯带

    本次arduino控制全彩灯珠主要是用到一个名为Adafruit_NeoPixel-master文件包,你可以在这里https://github.com/adafruit/Adafruit_NeoPixel点击下载,也可以在http://www.tuicool.com/articles/IbaAJbE在这里下载。...

    一个动态web爬虫_python_JavaScript_代码_下载

    代码基于phantomjs爬虫小记 by wils0n ,在tuicool上也有这篇文章http://www.tuicool.com/articles/JbEfIvV , 原作者的代码在Github上也有crawler_phantomjs 后来看到浅谈动态爬虫与去重这篇文章,受益匪浅,其...

    pjsip2.4全平台支持静态库,支持 x86_64 armv7 armv7s i386 arm64

    本人发布基于siphon的应用时,苹果提示必须支持64位模式,将项目Architecure修改为$(ARCHS_STANDARD)后,发现编译错误,然后参照OS 之 PJSIP 笔记(一) 编译多平台支持的静态库 ...发现真机可以运行了,但模拟器运行不...

    tcp/udp调试工具和tcp/udp server压力测试工具

    两个小工具用来debug tcp/udp 链接和测试tcp/udp server的压力 http://www.cnblogs.com/smark/p/4496660.html?utm_source=tuicool 和 sokit TCP/UDP 数据包收发测试

    ssm+easyui项目

    这是简单的入门ssm项目 有教程地址 http://www.cnblogs.com/caiya928/p/4851686.html?utm_source=tuicool&utm_medium=referral

    仿QQ聊天界面代码

    本代码是没有xib文件,纯代码布局,采用pod,xcode7,Autolayout http://www.cnblogs.com/songliquan/p/4559051.html?utm_source=tuicool&utm_medium=referral#commentform 代码

    用Jmeter测试RabbitMQ

    - [RabbitMQ JMeter集成实践](http://www.tuicool.com/articles/6BRzMji) - [JMeter与RabbitMQ测试指南](http://www.bbsmax.com/A/lamd0MWzge) #### 五、总结 通过上述步骤,我们可以有效地利用JMeter测试...

    JSP版网络拓扑图

    JSP版网络拓扑图。开源免费插件。在线编辑,保存,js无压缩,封装少。稍加修改就可以用于自己的项目。详细请看博客https://www.cnblogs.com/visec479/p/4360052.html?utm_source=tuicool

    Bootstrap CSS组件之输入框组

    http://www.tuicool.com/articles/VzUVfyi 通过向输入域添加前缀和后缀的内容,您可以向用户输入添加公共的元素。例如,您可以添加美元符号,或者在 Twitter 用户名前添加 @,或者应用程序接口所需要的其他公共的...

    ActiveMQ消息过期时间设置和自动清除解决方案

    ##### 参数详解 - **Message 过期则客户端不能接收**:当消息过期后,客户端将无法接收到这些过期的消息。 - **ttlCeiling**:表示过期时间的上限。例如,如果设置为30000毫秒(即30秒),那么任何通过程序设置的...

    ASP.NET Core 1.0 部署 HTTPS(.NET Core 1.0)

    http://www.cnblogs.com/qin-nz/p/aspnetcore-using-https-on-dnx451.html?utm_source=tuicool&utm_medium=referral  在反复搜索官方文档并反复尝试以后得出以下解决方案  在project.json 中,添加引用 Micr

    移动端开发技术文档.docx编程资料

    具体实现原理可以参考链接:[滚动加载图片(懒加载)原理](http://www.tuicool.com/articles/rUjIZzb)。 #### 五、分页加载 在移动端开发中,**分页加载**是一种常用的优化方法,它通过监测页面滚动位置来判断是否...

    android_demo

    平时用到的自定义框架或者View采用TabLayout实现的导航条来自http://www.cnblogs.com/ydxlt/p/5045407.html?utm_source=tuicool&utm_medium=referraltest`sdsdsd`:

    Tuicool-crx插件

    在【压缩包子文件的文件名称列表】中,我们看到唯一的文件名为"Tuicool.crx"。这是一个Chrome浏览器扩展的打包文件,通常包含了HTML、CSS、JavaScript代码以及必要的图像和其他资源。安装该CRX文件到Chrome浏览器后...

    基于maven的ssm框架Demo

    主要是基于maven和 SSM框架(Spring+SpringMVC+MyBatis),这里面是个小例子,要详细的文档步骤的话可以参考(http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral),...

    AndroidStudio环境下Android应用的项目结构简介.pdf

    tuicool /articles/f2e67nn,2016.4.14 总之,Android Studio的项目结构是开发者进行Android应用开发的基础,掌握这一结构能帮助开发者更高效地工作,快速定位并管理项目中的各个元素,从而提升整体开发效率和应用...

Global site tag (gtag.js) - Google Analytics