Servlet快速入门

来源:互联网 发布:java 键值对会覆盖 编辑:程序博客网 时间:2024/06/05 06:45

Servlet

servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

  1. Servlet生命周期
    Servlet接口中定义了所有servlet都必须实现的方法其中包括3个生命周期的方法 和两个其他方法。

    • init();
      服务器调用该方法初始化Servlet,init()方法只在Servlet第一次被 请求加载的时候被调用一次当有客户再请求Servlet服务时,Web服务器将启动一个新的线程,在该线程中,调用service方法响应客户的请求

    • service(ServletRequest req, ServletResponse res) ;
      初始化完毕,服务器调用该方法响应客户的请求

    • destory();
      服务器调用该方法消灭servlet对象

    • getServletConfig();获得任何启动信息

    • getServletInfo() ;servlet 返回有关其自身的基本信息,比如作者、版本和版权。
      生命周期的简单图示
      Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。

针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁

2 . Servlet接口
Servlet接口下主要的两个子类是GenericServlet, HttpServlet 。
其中GennericServlet主要定义一般的,和协议无关的servlet,使我们的编写更为容易只需要重写service方法即可。
HttpServlet主要创建适用于 Web 站点的 HTTP servlet 的抽象类。HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。
HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写service方法。源码如下:

//以GET方式为例protected void service(HttpServletRequest req, HttpServletResponse resp)        throws ServletException, IOException {        String method = req.getMethod();        if (method.equals(METHOD_GET)) {            long lastModified = getLastModified(req);            if (lastModified == -1) {                // servlet doesn't support if-modified-since, no reason                // to go through further expensive logic                doGet(req, resp);            } else {                long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);                if (ifModifiedSince < (lastModified / 1000 * 1000)) {                    // If the servlet mod time is later, call doGet()                    // Round down to the nearest second for a proper compare                    // A ifModifiedSince of -1 will always be less                    maybeSetLastModified(resp, lastModified);                    doGet(req, resp);                } else {                    resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);                }            }

继承HttpServlet时Servlet初始化时覆盖init() ,无需覆盖init(config)。
根据请求方式必须覆盖至少一种doXXX(请求方式)方法。当方法中的业务逻辑相同时可以互相调用。

3.自动加载配置
上面讲到init();方法只有在Servlet第一次被请求加载时才会调用一次,但是初始化数据库的时候是非常耗时的操作,这种情况并不是我们所希望的,我们希望的是服务器一启动就执行init();方法,初始化数据库等。这就需要配置web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0"    xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  <servlet>    <servlet-name>Servlet</servlet-name>    <servlet-class>Servlet</servlet-class>    <!--加入该标签配置自动加载,值是正整数,值越小优先级越高 -->    <load-on-startup>2</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>Servlet</servlet-name>    <url-pattern>/Servlet</url-pattern>  </servlet-mapping></web-app>
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 裤子被椅子刮了怎么办 脚麻了被别人动怎么办 毛孔又粗又黑怎么办 手臂睡觉压麻了怎么办 睡觉压的胳膊麻怎么办 摔跤摔到腰肿了怎么办 牛奶喝多了拉稀怎么办 doc文档下载是乱码怎么办 家人被教练技术骗了怎么办 十个月宝宝不爱喝水怎么办 离婚后孩子找爸爸怎么办 离婚后孩子要找爸爸怎么办 断奶期间胸涨的难受怎么办 断奶胸涨的很疼怎么办 过了麦季身上老痒怎么办 过麦时候皮肤痒怎么办 颈部起红疙瘩痒怎么办 脚底痒身上痒该怎么办 生完孩子屁股疼怎么办 pr打开工程文件无响应怎么办 娃娃和老师有隔阂了怎么办 大人字写得不好怎么办 不会写好看的字怎么办 无限量流量限速了怎么办 长期化妆后皮肤变黄怎么办 手机密码忘记了打不开怎么办 手机解压包不知道密码怎么办 手机屏图标没了怎么办 b站页面卡顿怎么办 被全景视觉骗了怎么办? 逆战进去没声音怎么办 Mac电脑ai卡住了怎么办 pr字幕打不了字怎么办 pr手写字多笔画怎么办 家中挖矿噪音很大怎么办 学了栏目包装不想干怎么办 在文本打字乱了怎么办 体考后觉得成绩有出入怎么办 荧光棒进眼睛里怎么办 无法读源文件或磁盘怎么办 爱剪辑视频横着怎么办