Servlet

1.1Servlet概述

1.1.1什么是Servlet

  由SUN公司提供的动态web资源开发技术,Servlet本质上就是一段Java程序,只不过这段Java程序需要放在容器中, 由容器(比如tomcat服务器)调用才可以执行!

1.1.2如何开Servlet程序

  需求:开发一个Servlet程序,当浏览器访问该程序时,可以向浏览器发送当前时间(的字符串)
  步骤:
  1)写一个类,需要实现(直接实现或间接实现)Servlet接口
  2)将编译后Servlet类,放在WEB应用中,并在WEB应用的web.xml文件中配置Servlet对外访问的虚拟路径。
  详细开发步骤
  (1)创建一个FirsServlet.java文件
  Servlet_第1张图片
  (2)编写FirstServlet类,实现Servlet接口(或继承Servlet接口的子类),并添加未实现的方法
  Servlet_第2张图片
  (3)实现Servlet中提供的处理请求的方法service方法,将表示当前时间的字符串响应给浏览器
  Servlet_第3张图片
  (4)细节处理(添加servlet类的包路径和导入依赖包)
  Servlet_第4张图片
  (5)打开CMD窗口,编译FirstServlet类
  通过命令编译会出现如下错误:
  Servlet_第5张图片
  原因是 javax.servlet这个包不存在,所有下面出现了很多找不到符号错误。
  在tomcat服务器的lib目录下有servlet的jar包,可以设置包路径:
  这里写图片描述
  接着再次进行编译:
  这里写图片描述
  (6)将FirstServlet类放在WEB应用中,并在web.xml文件中配置Servlet对外访问的虚拟路径
  将编译好的class文件(包括包路径)放在web应用的classes目录下.
  Servlet_第6张图片
  在WEB应用的web.xml文件中配置servlet对外访问的虚拟路径:
  Servlet_第7张图片
  (7)将WEB应用部署到虚拟主机中,启动服务器,通过浏览器访问FirstServlet
  这里写图片描述
  

1.2 Sservlet继承关系

  Servlet接口 - 提供了一个Servlet对象应该具有哪些功能
     |--GenericServlet(抽象类)–实现了Servlet接口,并且实现了其中大部分的方法,但是没有实现service方法,这个方法需要开发人员自己去实现
           |
          |--HttpServlet(抽象类)–继承了GenericServlet,并且实现了Service方法,在service方法中根据不同的请求方法,调用不同doXxx方法。因此我们在开发中,只需要写一个类继承HttpServlet,并覆盖doGet和doPost方法分别来处理(GET请求和POST请求即可!)
   Servlet_第8张图片       

1.3Servlet调用过程

1.3.1Servlet调用过程

问题:开发一个Servlet程序,放在WEB应用中,启动服务器,通过浏览器访问这个Servlet,可以在浏览器看到Servlet程序输出的内容,问:Servlet是怎么执行的?又是怎么调用的?
这里写图片描述
   

1.3.2Servlet生命周期

   Servlet在第一次被访问时将会创建实例,创建之后(服务器)立即调用init方法进行初始化的操作,此后该Servlet实例会一直驻留在服务器的内存中为后续的请求服务。只要有请求访问这个Servlet,就会调用service方法来进行处理,直到服务器关闭,或者是WEB应用被移出容器,随着WEB应用的销毁,Servlet实例也会跟着销毁,在销毁之前(服务器)会调用destroy方法进行善后的处理。

1.4Servlet开发细节

1.4.1Servlet虚拟路径的配置

  开发完Servlet程序后,需要再web.xml文件中配置Servlet对外访问的虚拟路径,其中配置方式有两种:
1.直接写一个路径: /FirstServlet /SecondServlet
2.使用星号匹配符写一个路径:
(1) 以斜杠开头,以斜杠星结尾(比如:/* /servlet/* /a/*)
(2) 以 .后缀 的形式(比如,.abc .html .action *.do)
  使用星号匹配符可以使得路径变得更加的灵活,但是也可能会造成一个路径会被多个mapping所匹配。那么哪一个mapping会起作用呢?
路径的优先级:

(1)哪一个更像(更接近、更精准)哪一个起作用!
(2)*.后缀的优先级永远最低

示例:
Servlet1 映射到 /abc/*
Servlet2 映射到 /*
Servlet3 映射到 /abc
Servlet4 映射到 *.do

  当请求URL为“/abc/a.html”,“/abc/”和“/”都匹配,哪个servlet响应 Servlet1将会匹配
  当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应 Servlet3将会匹配
  当请求URL为“/abc/a.do”时,“/abc/”和“.do”都匹配,哪个servlet响应 Servlet1将会匹配
  当请求URL为“/a.do”时,“/”和“.do”都匹配,哪个servlet响应 Servlet2将会起作用!

你可能感兴趣的:(Servlet)