zoukankan      html  css  js  c++  java
  • Servlet的一些细节(2)

    1. Servlet的创建时间

    Servlet是不能单独运行,调用它的叫做Servlet引擎,或者叫做web服务器

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

    Servlet对象一旦被创建,就会执行init方法,一旦销毁就会执行destroy方法。可以通过这两个方法观察Servlet对象的生命周期

    所以如果编写了一个Servlet类Demo时,在启动服务器的时候,是不会创建Demo这个Servlet对象的,只有在浏览器的URL中访问到http://.../Demo的时候,才会执行init方法并创建这个对象。我们关掉浏览器后,这个对象并不会消失,以后再访问这个地址,还是原来的Servlet对象。

    只有我们停掉这个服务器时,才会摧毁这个对象

    但是每次访问请求都会调用Servlet的service方法,并且每次请求,Servlet请求都会创建一个HttpServletRequest请求对象和一个HttpServletResponse对象,然后将这两个对象作为参数给service方法,service方法再根据请求方式调用doXXX方法。

    HttpServletRequest请求对象和HttpServletResponse对象的生命周期是很短的,比如说新浪的网站每天有几亿个请求,就会有几亿个对象,但是对象在请求结束后立即销毁,所以只要不是同时这么多请求,对服务器内存的压力还不是很大的。

    2.Servlet对象也可以是web服务器启动的时候创建,而不是第一次访问的时候

      <servlet>
        <servlet-name>ServletDemo</servlet-name>
        <servlet-class>cn.school.ServletDemo</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>


    structs框架其实就是一个大的Servlet程序,它就被配置服务器启动时候生成对象。

    里面数字大小就确定了启动的顺序,数据越小优先级越高。

    3. 缺省Servlet

    如果某个Servlet的映射路径仅仅是一个正斜杠,那么这个Servlet就成为当前web应用程序的缺省Servlet

    凡是在web,xml文件中找不到匹配的Servlet-mapping元素的URL,他们的访问请求都会交给缺省Servlet处理。

    在Java中,所有的请求都会走Servlet。

    不管是动态的,静态的,图片,视频还是什么什么的。

    比如说我们新建一个1.html静态页面,然后什么也不做,在浏览器中输入http://localhost:8080/T_D623/1.html

    就可以找到这个静态页面。

    这是因为服务器为我们配置了一个默认Servlet路径

    所有服务器配置文件都在C: omcatconf这个文件夹下,有一个web.xml为服务器下的所有程序共享。

    下面注册了一个Servlet,启动级别是服务器启动时启动

        <servlet>
            <servlet-name>default</servlet-name>
            <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
            <init-param>
                <param-name>debug</param-name>
                <param-value>0</param-value>
            </init-param>
            <init-param>
                <param-name>listings</param-name>
                <param-value>false</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>


    它的注册路径是

        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>


    就是所有找不到正确路径的请求都走这一条路径

    当我们请求一个静态页面时,就会通过这条路径请求,去查找项目中有没有对应名称的静态页面,如果没有就会返回

    所以呢,如果我们在项目中自定义了一个默认Servlet路由,那么就会取代服务器中的,所以要慎重。

  • 相关阅读:
    jquery源码 DOM加载
    用 Vue 全家桶二次开发 V2EX 社区
    java中初始化对象变量的方法
    跟我一起学extjs5(08--自己定义菜单1)
    NYOJ 57 6174问题
    Android 手动按power键上锁,没有锁屏提示音,无法恢复【单机必现】
    说好的加班呢
    排序总结之高速排序
    【c语言】模拟实现库函数的atof函数
    Oracle存储过程update受外键约束的主键值时完整性冲突解决方式
  • 原文地址:https://www.cnblogs.com/tech-bird/p/3824525.html
Copyright © 2011-2022 走看看