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路由,那么就会取代服务器中的,所以要慎重。

  • 相关阅读:
    PAT A1094 The Largest Generation (25 分)——树的bfs遍历
    PAT A1055 The World's Richest (25 分)——排序
    PAT A1052 Linked List Sorting (25 分)——链表,排序
    PAT A1076 Forwards on Weibo (30 分)——图的bfs
    辅导员
    辅导员面试
    C程序设计
    Excel VBA 基本概念
    Excel函数
    导入excel表的数据到数据库ssh
  • 原文地址:https://www.cnblogs.com/tech-bird/p/3824525.html
Copyright © 2011-2022 走看看