当前位置 : 主页 > 编程语言 > java >

jsp- servlet篇

来源:互联网 收集:自由互联 发布时间:2021-06-25
Servlet的执行流程 1. 从浏览器输入地址(发起请求)开始分析: http://localhost:80/xx/hello localhost 也可能是ip 或者域名 ---》定位服务器主机 80 定位到tomcat xx 上下文路径, tomcat/conf/server.x

 

Servlet的执行流程

1. 从浏览器输入地址(发起请求)开始分析: http://localhost:80/xx/hello

  1. localhost   也可能是ip 或者域名  ---》定位服务器主机
  2. 80 定位到tomcat
  3. xx  上下文路径,tomcat/conf/server.xml  中的

         <Context  docBase=”F:\workspace\day11-servlet\webapp” path=”xx” />  中的path 

            通过上面的步骤找到了 docBase后面的项目的真实路径

                            根据约定去找到项目中的配置文件 web.xml

2. web.xml内容分析:

  1. 找到url-pattern的值为 /hello
  2. 通过上一步中对应servlet-name 找到对应的servlet标签
  3. 找到对应的Servlet的全限定类名(包名+类名), com.gs.controller.HelloServlet
     仅仅是一个字符串而已,交给Tomcat进行处理, 并通过反射来创建对象并调用方法

3. Tomcat对Servlet的创建:

  1. 通过上获得 servlet的完全限定名为参数使用反射来创建一个对象

    Class clz  =  Class.forName(“com.gs.controller.HelloServlet”)

    Clz.newInstance()  要求自己的Servlet类必须有公共的无参数的构造方法,否则会包NoSuchMethodException异常

   2.如果是第一次访问,就会创建一个Servlet的对象,并缓存起来

  3. 如果是第二次访问 (或者 n 次访问) 直接先从缓存中看有没有,有直接使用调用service方法

 

<welcome-file-list>
       <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
  
  <servlet>
      <!-- 给servlet可以任意取名,一般类名相同 -->
    <servlet-name>HelloServlet</servlet-name>
    <!-- servlet的全限定类名,也就是servlet的位置 -->
    <servlet-class>com.gs.controller.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <!-- 跟上面的servlet名字相同 -->
    <servlet-name>HelloServlet</servlet-name>
    <!-- 浏览器通过该url找到servlet,斜杠别丢 -->
    <url-pattern>/helloServlet</url-pattern>
  </servlet-mapping>

 

 

 

Servlet的生命周期

javax.servlet.Servlet接口中的方法:

  public void init(ServletConfig config):  初始化方法

  public void service(ServletRequest req, ServletResponse res):服务方法

  public void destroy():销毁方法

  public ServletConfig getServletConfig():返回当前Servlet的配置信息对象.

  public String getServletInfo():该方法返回Servlet的信息(作者,版权等).

--------------------------------------------------------------------

Servlet的生命周期方法:

  public void init(ServletConfig config):初始化方法,在第一次请求时调用,只在最初的时候调用一次.

  public void service(ServletRequest req, ServletResponse res):服务方法

  public void destroy():销毁方法

Servlet生命周期可分为5个步骤

  1. 加载Servlet。当Tomcat第一次访问Servlet的时候,Tomcat会负责创建Servlet的实例
  2. 初始化。当Servlet被实例化后,Tomcat会调用init()方法初始化这个对象
  3. 处理服务。当浏览器访问Servlet的时候,Servlet 会调用service()方法处理请求
  4. 销毁。当Tomcat关闭时或者检测到Servlet要从Tomcat删除的时候会自动调用destroy()方法,让该实例释放掉所占的资源。一个Servlet如果长时间不被使用的话,也会被Tomcat自动销毁
  5. 卸载。当Servlet调用完destroy()方法后,等待 jvm 垃圾回收。如果有需要再次使用这个Servlet,会重新调用init()方法进行初始化操作

细节注意点:

             1:构造器先执行,创建Servlet对象:init,service,destory方法,都是非static方法,都得使用对象调用.

             2:一个Servlet类在整个生命周期中最多只有一个对象.

             3:init在构造器执行之后,立马执行,只执行一次,为对象做初始化操作.

             4:service方法在每次请求都会执行.

             5:destroy方法只有在正常关闭Tomcat时,才会执行,不要期望该方法一定执行,不要在该方法编写扫尾操作.

             6:Servlet类必须使用public修饰,Servlet的构造器,必须是公共无参数的。(上面执行流程提到过)

 

get方式和post方式有何区别

1. 数据长度上:

  • GET方式:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
  • POST方式:可以在请求的实体内容中向服务器发送数据,传送的数据量无限制。

2.请求参数的位置上:

  • GET方式:请求参数放在URL地址后面,以?的方式来进行拼接
  • POST方式:请求参数放在HTTP请求包中

3.用途上:

    • GET方式一般用来获取数据,多用于超链接请求,(因为提交的数据在地址栏可见,所以不安全)
    • POST方式一般用来提交数据,多用于HTML的表单提交,等用于录入数据,并传递给Web服务器,提交的数据在地址栏不可见,安全。(处理订货表单、在数据库中加入新数据行)
网友评论