Servlet初识

1、什么是Servlet

  • Servlet是JavaWeb的三大组件之一(Servlet,Listener,Filter),它的工作就是:接受客户端的请求数据;完成请求;返回响应。
  • Servlet是和平台无关的服务器端组件,它运行在Servlet容器中(如:Tomcat Servlet容器负责Servlet和客户的通信以及调用Servlet的方法)
  • 它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

2、如何编写一个Servelt

有三种方法:
         * 实现javax.servlet.Servlet接口 继承
         * javax.servlet.GenerlcServlet类继承
         * javax.servlet.http.HttpServlet类 (通常使用的方法)
Servlet中的方法大多数不由我们来调用,而是由Tomcat调用。并且Servlet的对象也不是由我们来创建,由Tomcat创建。

3、如何让浏览器能够访问Servlet?

                需要给Servlet指定一个Servlet路径(让Servlet与一个路径绑定在一起)

 给Servlet配置Servlet路径,这需要在web.xml中对Servlet进行配置

<servlet>
                        <servlet-name>xxx</servlet-name>
                        <servlet-class>cn.itcast.servlet.AServlet</servlet-class>      
                </servlet>

                <servlet-mapping>
                        <servlet-name>xxx</servlet-name>
                        <url-pattern>/跟servlet绑定路径</url-pattern>

注意:
        a>给类AServlet起个名字叫xxx,注意:写servlet类的全名
        b>先得有名为xxx的servlet,然后要给xxx配置什么路径,在mapping中完成
        c>说明:
        这个绑定的路径一旦被访问,实际上是访问名为xxx的servlet,而这个servlet的类是cn.itcast.servlet.AServlet。得到这个字符串,服务器根据反射机制,会自动创建该类的对象,执行该类的方法。

4、Servlet的生命周期

  • 加载和实例化
    Servlet容器负责加载和实例化Servlet,容器是通过Java的反射API(使用类加载器加载servlet类)来创建Servlet实例,调用的是Servlet的默认构造方法,所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。
  • init:只被调用一次。在创建好实例后立即被调用。
  • service:每次请求都会调用,实际用于响应请求
  • destory:只被调用一次。当前Servlet所在的web应用被卸载前调用,用于释放当前Servlet所占用的资源

5、Servlet接口中的方法

        void init(ServletConfig arg0) //Servlet对象创建之后执 (做一些初始化操作)

        void service(ServletRequest request, ServletResponse response)//每次处理请求都是处理这个方法

        void destroy() //Servlet被销毁之前调用,只执行一次(释放那些非内存资源)


        ServletConfig getServletConfig()//获取Servlet的配置信息


        String getServletInfo()//获取Servlet的信息

6、load-on-startup参数

用以指定Servlet被创建的时机。若为负数,则在第一次请求时被创建。若为0或正数,则在当前web应用被Servlet容器加载时创建,且数组越小越早被创建。

    <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>com.ithings.servlet.HelloServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

7、serlvet-mapping通配符

可以用匹配符配置,但是要注意,必须是.do或者 /开头的以/* 结束的路径。

对于如下的一些映射关系:

    Servlet1 映射到 /abc/* 

    Servlet2 映射到 /* 

    Servlet3 映射到 /abc 

    Servlet4 映射到 *.do 

问题:

    当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应.        

        【Servlet引擎将调用Servlet1。】

    当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应.           

        【Servlet引擎将调用Servlet3。】

    当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应.  

        【Servlet引擎将调用Servlet1。】

    当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应.                            

        【Servlet引擎将调用Servlet2。】

    当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应.    

        【Servlet引擎将调用Servlet2。】

8、ServletConfig接口

  • 1个ServletConfig对象,对应一段web.xml中servlet的配置信息
  • ServletConfig接口的方法;
1、ServletContext getServletCOntext()        //获取Servlet上下文对象
2、String getServletName()                   //获取的是<servlet-name>中的内容
3、String getInitParameter(String name)      //通过名称获取指定初始化参数的值
4、Enumeration getInitParamenterNames()      //获取所有初始化参数的名称

9、ServletContext对象(重要)

             代表当前web应用,可从中获取当前web应用的各个信息。一个项目就一个ServletContext对象。我们可以在N多个servlet中来获取这个唯一的对象,使用它来给多个Servlet传递数据(可以用它来完成共享数据)

①概述
             ServletContext对象的创建是在服务器启动时,销毁时服务器关闭时。(与服务器同生死)
             作用:
                          不同Servlet之间传递共享数据(域对象)

②获取ServletContext
             在void init(ServletConfig config)中,getServletContext()方法可以获取到
                          ServletContext context=config.getServletContext();

             GenericServlet或HttpServlet中获取ServletContext
                          GenericServlet类中有ServletContext()方法。使用this.getServletContext()

③域对象功能
              域对象可以理解为:域对象就是用来在多个Servlet中传递数据

    ** javaweb有四大域对象
            PageContext
            ServletRequest
            HttpSession
            ServletContext

            所有域对象都有存取数据的功能。因为域对象内部有一个Map,用来存储数据,

    ** ServletContext操作数据的方法:(同时也是域对象的基本方法)

            ** void setAttribute(String name ,object value)
                            //用来存储一个对象,可以称之为存储一个域属性,使用键值对的方式。
            ** object getAttribute(String name):
                            获取ServletContext中的数据。

            ** void removeAtteibute(String name):
                            移除ServletContext中的域属性
            ** Enumeration getAttributeNames();
                            获取所有域属性的名称

④全局应用参数
             可以配置公共的初始化参数,为所有的Servlet而用,使用<context-param>标签

扫描二维码关注公众号,回复: 1121155 查看本文章
<context-param>
        <param-name>name</param-name>
        <param-vlaue>value</param-vlaue>
</context-param>

⑤获取相关资源的方法

1、获取部署在服务器上的绝对路径    
            servletContext.getRealPath("");
2、获取当前web应用的名称
            getContextPath() 
2、获取资源流
            InputStram is=servletContext.getResourceAsStream("");
3、获取指定目录下所有资源路径
            Set set=servletContext.getRescourcePaths("")

猜你喜欢

转载自blog.csdn.net/ma_chen_qq/article/details/77949809