认识servlet

    最近没有做什么事,闲暇时看看《head first servlet&jsp》;800页的书(本来不愿意看的),真的很厚。看了几单元觉得不错,故将自己的看法写下来。

   1  认识servlet,jsp,tomcat

    servlet:简单说是一个组件,jsp本质就是servlet。 servlet有关的接口和类在二个包中:javax.servlet,javax.servlet.http;

    request1: 居然jsp就是servlet,那为什么要有jsp这东西?

     其实就是:居然有了c语言,为什么会出现java一样。更好地满足需求呗! javaweb项目是需要和用户进行交互的,使用servlet会"比较难"显示界面,

特别是css样式--大写的尴尬(你试试)。jsp的出现解决了这个问题。看例子:

      ex1:带样式的超链接

        servlet: out.println("<a style='text-decoration:none; color:red;'>ss</a>");

        jsp: <style> </style> <a>ss</a>--------html

      servlet在这里:css,position控制都是问题?对吧

     req2: tomcat是什么?作用?

      开源服务器,专门给javaweb开发人员用的,好家伙。至于作用: (1)服务器 (2)servlet/jsp容器——>控制(管理)servlet的行为

     2 实现servlet

        先看一张图:

 

  

      之前说了,与servlet有关的接口和类都是在javax.servlet,javax.servlet.http中,这个包是父接口与子接口关系,http的那个包是专门用来处理http有关的请求。

  以后会发现经常使用的接口和类都在第二个包中。

       上图中我们看到了,实现servlet有二种方式

         (1)GenericServlet ----通用请求,必须重写service()函数

         (2)Httpservlet ----与http协议有关的请求 ,必须重写doGet(),doPost()中至少一个。这个类重写了service()方法

         浏览器使用的基本上是http协议,所以基本上的servlet是继承Httpservlet

 

     3  servlet生命周期

               项目(假设只有一个servlet)部署在容器中,容器会做什么? 估计是加载DD文件(web.xml部署文件) 。我们关心的来了

                req 3:谁什么时候创建servlet对象?

                ans:容器创建的,什么时候? 不好说,可能是在部署之后创建,也可能是"第一次请求"时,这没有关系(不同服务器可能不一样)。下面假定部署时吧.

                req 4:对象什么时候成为servlet?

                 ans这个问题一定要懂, 容器调用servlet的构造函数之后还不是一个完整的servlet对象。为什么?原因是这个对象没有servletConfig对象。

                 servletConfig对象:简单理解就是servlet在web.xml的一部分(所谓的servlet部署文件)对应的对象。

                ans: 容器执行构造函数之后,在调用init(servletConfig cf)函数时将servletConfig对象赋予对象---->恭喜你,你现在是完美的servlet了

                注意:servlet还没处理任何有关用户的请求。接下来就厉害了

                req 5:servlet对象只有一个

               ans:不管这个servlet以后处理多少个用户的请求,servlet实例只有一个。也就是构造函数和init()不会再调用!除非servlet重新部署了(修改代码)。

                

    4  生命周期继续?

             上面说的是处理用户请求之前的一些初始化,用户请求来了,怎么办?

        req 6:怎么处理用户请求?

            httpServlet实例调用service()函数,有这个函数判断请求方式(get,post),从而决定调用doGet或者doPost();

       req 7:同时处理多用户?

              使用多线程机制---容器维护

       req 8:  servlet什么时候结束?

                不知道。关闭服务器肯定是结束的,其他可能呢? servlet长期不使用会结束(释放资源啊)

---------------------------------------------------------------------------------------------------------------------------------------------------------------

    5 实用的request请求对象

            HttpRequest request对象作用

         (1) String getparameter();

       获取请求参数,一般使用在servlet中,获取客户端过来的一些"数据"

         (2)Object getAttribute(); void setAttribute();

             设置或者获取request属性,比如从数据库中读取相应的数据List(图书),通过设置request到客户端。获取list,显示出来

         (3)获取请求首部字段 

         (4)cookies[] getCookies()

            获取cookies

        (5)其他

 

        了解servlet之后,接下来我们应该继续学习

         (1)"属性与相关监听者"

         (2)会话管理(session和cookies原理)

 

 

 

   

posted @ 2017-03-04 21:31  ANDY1995  阅读(178)  评论(0编辑  收藏  举报