zoukankan      html  css  js  c++  java
  • 第1天:初识Servlet

    一、servlet是什么?

    是用java编写的应用在服务端的程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和修改数据,生成动态Web内容,例如页面等等。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

    二、工作原理、流程

     

    1、工作原理

    Servlet容器(Tomcat)Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例

    用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如TomCat)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。

    ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。

    ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。

     对于每一个应用程序或系统,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。

    2、工作模式

    • 客户端发送请求至服务器
    • 服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器
    • 服务器将响应返回客户端

    3、servlet接口

    public interface Servlet {
        void init(ServletConfig var1) throws ServletException;
     
        ServletConfig getServletConfig();
     
        void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
     
        String getServletInfo();
     
        void destroy();
    }
    

    1、生命周期方法:

    init():很明显,servlet的初始化方法,依赖于servletConfig对象初始化。当Servlet第一次被请求时,Servlet容器就会开始调用这个方法来初始化一个Servlet对象出来,在后续请求中不会再被Servlet容器调用。

    service():每当请求Servlet时,Servlet容器就会调用这个方法。第一次请求时,Servlet容器会先调用init()方法初始化一个Servlet对象出来,然后会调用它的service()方法进行工作,但在后续的请求中,Servlet容器只会调用service方法了。

    destroy():卸载应用程序或者关闭Servlet容器时,Servlet容器就会调用这个方法销毁Servlet。

    2、其他方法:

    getServletConfig():返回由Servlet容器传给init()方法的ServletConfig对象。

    getServletInfo():返回Servlet的一段描述,可以返回一段字符串。

    3、生命周期:

    init( )->service( )->destroy( )是Servlet生命周期的方法。代表了Servlet从“出生”到“工作”再到“死亡 ”的过程。

    举例:

    web.xml:

        <!--配置和映射servlet-->
        <servlet>
            <!--配置servlet的注册名-->
            <servlet-name>helloServlet2</servlet-name>
            <!--配置servlet的全类名-->
            <servlet-class>com.servlet.sc.HelloServlet2</servlet-class>
            <init-param>
                <!--初始化该servlet的配置参数-->
                <param-name>name</param-name>
                <param-value>lzg</param-value>
            </init-param>
            <!--初始化的顺序,0或正数直接加载,越小优先级越高,负数代表调用的时候才初始化-->
            <load-on-startup>-1</load-on-startup>
        </servlet>
        <!--配置servlet的映射-->
        <servlet-mapping>
            <!-- 需要和要映射的 servlet 节点的 serlvet-name 子节点的文本内容一致 -->
            <servlet-name>helloServlet2</servlet-name>
            <!--映射具体的访问路径,/代表该web应用的根路径-->
            <!--/*代表任何请求都会触发,/do代表以/do结尾的请求才会触发-->
            <url-pattern>/do</url-pattern>
        </servlet-mapping>

    实体类:

    import javax.servlet.*;
    import java.io.IOException;
    import java.util.Date;
    public class HelloServlet2 implements Servlet {
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("init-2");
        }
    
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
    
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("-2当前时间是:"+new Date());
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
        @Override
        public void destroy() {
            System.out.println("destroy-2");
        }
    }

    效果:

     参考博客:https://blog.csdn.net/qq_19782019/article/details/80292110

  • 相关阅读:
    python网站开发准备ubuntu14.04安装mysql实现windows管理
    python 数据结构之二叉树
    python 数据结构之二分查找的递归和普通实现
    python 数据结构之归并排序
    python数据结构之希尔排序
    ctf study of jarvisoj reverse
    python数据结构之quick_sort
    堆与栈
    汇编整理
    js运算符
  • 原文地址:https://www.cnblogs.com/lzghyh/p/13965808.html
Copyright © 2011-2022 走看看