zoukankan      html  css  js  c++  java
  • servlet初探

    一、什么是servlet

    servlet是服务端小程序。

    访问某个网页,需要输入url,根据url定位到服务器,然后找到相对应的资源。即请求服务器,服务器接到请求,根据url,调用相对应的java类,进行一系列操作,响应给浏览器访问结果。

    而这个java类,是放在web容器里的,比如说Tomcat。那么并不是所有java类都可以被Tomcat识别,并且调用。只有符合一定接口的java类才行。这个java类就叫做servlet。

    其实servlet是一个接口。

    二、servlet的生命周期

    Tomcat作为一个web容器,存放了大量的servlet,对他进行生命周期管理。如下图servlet接口有init ,getServletConfig,service,getServletInfo,destroy五个方法。

    都是供Tomcat调用。其中service是最重要的,每次访问servlet,都会调用该方法。init方法只会调用一次,根据servlet配置,有第一次访问servlet时调用,或者服务

    器启动时调用。(load-on-startup)destroy方法时在服务器正常关闭前调用,用来销毁对象的。另外两个方法时访问servlet配置。由于init方法只调用一次,所以servlet

    在Tomcat容器中是单例存在的,因此,就会有多线程访问问题。所以,一般不要在servlet中定义全局的变量,会导致多线程问题。常量没关系。所以一般不要用jsp的 <%!%>

    脚本。而service是方法,不存在多线程问题。

     三、servlet配置

    有两种配置。

    第一是web.xml中配置

        <servlet>
    <servlet-name>myservlet</servlet-name>
    <servlet-class>com.itcast.web.ServletDemo1</servlet-class>
    <!-- 配置servlet启动时机,小于0为访问时调用init,大于等于0为启动服务器时调用init-->
    <load-on-startup></load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>myservlet</servlet-name>
    <url-pattern>/abc</url-pattern>
    </servlet-mapping>

    第二种配置是3.1版本以后,注解

    @WebServlet("/demo1")

    四、servlet运行原理
    浏览器根据url的ip地址,访问到服务器,根据端口号,访问到具体的服务器程序。根据资源地址,去web.xml中找url-pattern,找到对应的servlet,如果是第一次调用,然后
    再servlet中找到该类的全限定名。然后Tomcat容器通过反射的方法,forName,newInstance,反射出servlet类。,
    调用init方法初始化类,然后根据访问类型,执行具体操作。这些都是Tomcat的工作。servlet只是写好去干什么。

    五 具体使用
    可以自定义java类,然后继承servlet接口(implements)。重载五个方法。但是一般不用,因为只需要写service方法,其他四个方法一般默认,所以这么写有点麻烦
    然后也可以直接继承genericServlet抽象类(extends),这个抽象类继承了servlet接口,并且重载了四个方法,我们只需要重载service方法即可。但是依旧有些麻烦,因为还需要区分访问
    类型,根据不同的类型去写不同的方法。
    最后直接继承
    HttpServlet抽象类(extends) ,该类直接将service方法写好,并且有doget,dopost抽象方法。我么直接重载这两个方法即可

    最后,因为servlet没有内置对象,除了request和response以外都需要自己创建,并且输出、html都需要输出流,非常麻烦,而且需要程序员写,ui工作人员配合非常麻烦,因此
    一般都用jsp,而servlet只用作控制器,与界面相关的都交给jsp来做。



  • 相关阅读:
    测试的基本方法
    一些基本常用的正则表达式
    MySQL和Oracle的区别与不同
    Ubuntu中使用python3中的venv创建虚拟环境
    在Ubuntu中搭建Python3的虚拟环境并开始django项目
    Django中的图片加载不出来解决方式记录
    在django中进行后台管理时插入外键数据时不显示值的问题
    Django2.2连接mysql数据库出现django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None问题
    在Ubuntu中安装了MongoDB后无法启动mongod的问题
    PostgreSQL练习3
  • 原文地址:https://www.cnblogs.com/tomato190/p/13686452.html
Copyright © 2011-2022 走看看