传智播客Java web之 Servlet工作原理以及日志处理

来源:互联网 发布:互联网 大数据 生活 编辑:程序博客网 时间:2024/05/16 19:01
    了解完类装载器后,接下来张老师讲解了Servlet的特点及运行过程、Servlet的相关接口和接口中的常用方法,这些对深入理解Servlet有很大帮助。最后视频讲解了与日志有关的问题。
    视频中总结的Servlet的特点,这些特点对理解servlet的工作原理至关重要:
      1.Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。
      2.Servlet引擎是一种容器程序,它负责管理和维护所有Servlet对象的生命周期。Servlet的加载、执行流程、以及如何接收客户端发送的数据和如何将数据传输到客户端等具体的底层事务,都是由Servlet引擎来实现的。Servlet引擎负责将客户端的请求信息转交给Servlet和将Servlet生成的响应信息返回给客户端。
      3.Servlet属于一种插件,它是一个提供了一些约定方法供容器去调用的类,它只负责在自身的方法中接受并处理容器传递进来的数据,以及生成并返回给容器去使用的数据和状态信息。
      4.Servlet的最常见应用在于读取WEB浏览器传递给WEB服务器的参数和生成WEB服务器返回给WEB浏览器的动态网页文档内容;Serlvet也能获取WEB浏览器发送的HTTP请求消息中的各个请求头和请求行信息,以及生成用于WEB服务器发送的HTTP响应消息中的状态行和响应头信息;Serlvet还能获取WEB服务器和Servlet引擎自身的一些环境和状态信息。
      5.Servlet程序的运行过程就是它与Servlet引擎的交互过程,Servlet程序只与Servlet引擎打交道,它并不与Web服务器和客户端进行任何直接的交互。 
      6.Servlet本身就是Java语言的一个应用,具有Java语言的所有优势,能完成普通Java程序所能完成的所有功能。
      7.Web服务器上可以布置多个功能各不相同的Servlet,每个Servlet 都应宣称它可以处理何种样式的URL,当符合样式的URL请求到达时,Servlet引擎调用相应的Servlet进行处理。
    网络程序一般要和数据库打交道,了解servlet与数据库的交互过程对以后的编写和调试将有很大的帮助。Servlet程序查询数据库的工作过程如下:首先是客户端浏览器向WEB服务器发出指向Servlet的URL请求,服务器将接收到的请求转发给Servlet引擎,Servlet引擎载入并执行Servlet程序,Servlet程序通过JDBC驱动程序访问数据库得到相应的结果。然后再倒序返回给客户端浏览器。
    Servlet运行过程如下:
      1.Servlet引擎检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第1步,否则,执行第2步。
      2.装载并创建该Servlet的一个实例对象。
      3.调用Servlet实例对象的init()方法。
      4.创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
      5.WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
Servlet的运行过程就是以上5步骤,在这个过程中有些需要特别说明:
      1.在在<servlet>元素中嵌套一个<load-on-startup>子元素,WEB应用程序在启动时就可以装载并创建Servlet的实例对象、以及调用Servlet实例对象的init()方法。例如:
         <servlet>
               <servlet-name>invoker</servlet-name>
                     <servlet-class>
                           org.apache.catalina.servlets.InvokerServlet
                     </servlet-class>
               <load-on-startup>2</load-on-startup>
         </servlet>
      2.在Servlet的整个生命周期内,它的init方法只被调用一次,而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法。
      3.Tomcat也提供了是否自动重新装载被修改的Servlet的配置选项。在<Tomcat安装主目录>/conf/server.xml文件中,可以将<Context>元素的reloadable属性设置为true,这样,Tomcat将监视该WEB应用程序的/WEB-INF/classes和/WEB-INF/lib目录下的类是否发生了改变,然后自动重新装载那些发生了改变的类。例如:<Context path="/it315" docBase="d:/myweb" debug="0" reloadable="true"/>
    最后一段视频是关于日志的,日志功能比较复杂,JDK本身提供了日志记录模块,相关信息如下:
      1.JDK中提供的日志记录模块允许系统人员通过配置文件来指定输出哪些级别的日志信息、以什么格式输出日志信息、以及将日志信息输出到哪个目标设备。 
      2.JDK中的日志记录模块的所有类都位于java.util.logging包中,其中,只有java.util.logging.logger类是开发人员必须在程序中调用的类,而其他一些类则是在幕后工作或要扩展日志记录功能时才使用。
      3.JDK中的日志记录模块将日志信息定义成了7个级别:FINEST、FINER 、FINE 、CONFIG、INFO、WARNING和SEVERE,它们的级别按这里排列的顺序依次递增, logger类中定义了多组方法来分别生成这7个级别的日志信息。
      4.一个应用程序中可以有多个logger对象,每个logger对象都有一个名称,其名称通常采用包名的形式,用点(.)对名称进行层次划分。根据logger对象的名称,logger对象可以在逻辑上形成一种父子关系,例如,名称为“org.it315.test”的logger对象就是名称为“org.it315”的logger对象的子级。最顶级的logger对象称为根logger对象,用空字符串("")表示。
      5.调用Logger.getLogger方法可以获得一个logger对象,logger对象的名称通过传递给getLogger方法的参数指定,如果指定名称的logger对象已经存在,getLogger方法返回已经存在的logger对象,否则,getLogger方法创建一个新的logger对象。
      6.在应用程序中创建的每个logger对象存储在一个LogManager对象中,一个JVM中只能有一个LogManager对象。这个全局唯一的LogManager实例对象在LogManager类加载时被创建,logger.getLogger方法内部首先调用LogManager.getLogManager()方法获取LogManager实例对象,然后从中检索指定名称的logger对象。
原创粉丝点击