JAVAWeb Servlet简介

什么是servlet?

 处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西。理解这个的前提是了解一些http协议的东西,并且知道B/S模式(浏览器/服务器)。


JAVAWeb Servlet简介_第1张图片
servlet调用图


servlet的生命周期

Servlet生命周期的三个关键方法,init、service、destroy。

  Servlet没有main()方法,不能独立运行,它的运行完全由Servlet引擎来控制和调度。

              针对客户端的多次Servlet请求,通常情况下,服务器只会在第一次请求的时候创建一个Servlet实例对象,并驻留在内存中,为后续的其他请求服务,直至web容器退出,Servlet实例对象才会销毁。

              在Servlet的整个生命周期内,Servlet的init()方法只被调用一次,而对于每一个请求都会调用一次Servlet的service()方法service根据请求方式调用doGet或doPost方法

              如果在元素中配置了一个元素,那么WEB应用程序在启动时,就会装载并创建实例对象、以及调用Servlet实例对象的init()方法。可以在启动的时候为整个WEB应用创建一些必要的的资源或连接。但如果所有的Servlet都启动加载,则会大大增加服务器负担,而且有些Servlet永远也不会被客户访问到,白白浪费资源,所以从性能角度,应合理利用该特性。


    init (ServletConfig config)


   init()



 一个成员变量config


什么是ServletConfig对象

ServletConfig对象,叫Servlet配置对象。主要用于加载配置文件的初始化参数。


创建时机

ServletConfig对象在servlet对象创建之后,调用init方法之前创建,该Config对象随着init方法传入到servlet中。


常用方法

    java.lang.String getInitParameter(java.lang.String name)  根据名称获取参数值

    java.util.Enumeration getInitParameterNames()         得到所有参数

ServletContext getServletContext()                   获取servlet上下文对象

ava.lang.String getServletName()                    得到servlet名称


问题:SevletConfig中的初始化参数不能被其他Servlet共享!!


下面来演示一下这些方法的使用:

我们先在servlet的配置文件web.xml配置servlet的初始化参数,然后运用上面的方法得到这些数据!

配置文件:

testpathcom.vmaxtam.dotest.testpath                --这个标签写在要设置的servlet内

              color  -属性名

            red    -属性值

     

下面我们就在相应的servlet内得到配置好的数据吧!

ServletConfig servletConfig = getServletConfig();

String color = servletConfig.getInitParameter("color");

这样就能得到配置好的数据了!还有更简单的方法:

先说明一下:首先HttpServlet继承自GenericServlet类,而GenericServlet类又继承自Servlet接口,Servlet接口有方法getServletConfig() ,所以HttpServlet肯定有方法getServletConfig()。而GenericServlet类又实现了ServletConfig 接口,也就是他肯定实现了ServletConfig接口中的所有方法,所以以上代码我们还可以这样写:

String color = getInitParameter("color");

其它方法也差不多,这里不做示范~~~


ServletContext对象

什么是ServletContext对象

我们知道一个Web应用里面可以有多个servlet,如果现在有一份数据需要传给所有的servlet使用,那么我们就可以使用ServletContext对象了。

ServletContext对象叫servlet上下文对象。该对象在一个web应用中只会创建一个对象,代表当前web应用的环境。在当前的web应用中所有servlet都共享一个ServletContext对象。

ServletContext对象创建的时机

由ServletContext对象的特性我们可以推断出它被创建的时机:每当一个web应用被加载,那么一个ServletContext对象就被创建了,然后web应用里的servlet就可以同使用它了!

那么,我们如何在servlet里得到这个已经创建的对象呢?

得到ServletContext对象

开发者十分巧妙的将ServletContext对象放入在了该web应用里的每一个servlet中的ServletConfig对象里!

在一个servlet被创建时,会调用它的构造方法,随后就会调用init()方法对它初始化,而在初始化的过程中,就把ServletContext对象放入到ServletConfig对象中了!那么这个servlet得到ServletContext对象对象就十分方便了,只需要用一句代码!

ServletContext servletContext =this.getServletContext();


ServletContext对象的常用方法

得到了ServletContext对象,我们就要想:这个对象有什么用呢!?以下介绍一下它的常用的方法。

主要有五种用法:

一)得到web应用的上下文路径:

    java.lang.String getContextPath()     


二)获取web应用的全局参数 :

     java.lang.String getInitParameter(java.lang.String name)  

    java.util.Enumeration getInitParameterNames()  


三)域对象相关的方法:

    java.lang.Object getAttribute(java.lang.String name)     

    void setAttribute(java.lang.String name, java.lang.Object object)

    void removeAttribute(java.lang.String name)


四)用于转发:

    RequestDispatcher getRequestDispatcher(java.lang.String path)  


五)web应用加载资源文件方法:

    java.lang.String getRealPath(java.lang.String path)   

    java.io.InputStream getResourceAsStream(java.lang.String path)


下面示范一下使用这些方法:


一)得到web应用的上下文路径

通过request来调用该方法

String path = request.getContextPath();

System.out.println(path);

输出结果:

/TestArea

web应用的路径 是 tomcat服务器中web应用的名称,而不是ecplise中的项目名称。

request.getContextPath();为了方便获取上下文路径。推荐使用该方法。



二)获取web应用的全局参数


先在web应用对应的web.xml中设置全局参数:  全局参数的标签写咋标签内

AAAAAA's valueBBBBBB's value

然后在servlet内得到这个参数:

//1.得到ServletContext对象ServletContext context =this.getServletContext();


        //2.获取全局参数System.out.println(context.getInitParameter("AAA"));


        Enumeration enums = context.getInitParameterNames();

        while(enums.hasMoreElements()){

            String paramName = enums.nextElement();

            String paramValue = context.getInitParameter(paramName);

            System.out.println(paramName+"="+paramValue);

        }

注意: 所有的servlet都可以获取全局参数!!!

你可能感兴趣的:(JAVAWeb Servlet简介)