Servlet详解

1、什么是servlet:Servlet是实现java语言实现到动态web资源的技术,本质上是一段java代码,可以放置道Servlet容器中运行。

2、入门案例

  1、想要实现servlet就必须实现javax.Servlet接口,Servlet接口定义了一些开发servlet的一些方法

  

 void

 

destroy()

 

          Called by the servlet container to indicate to a servlet that the servlet is being taken out of service.

销毁方法

 ServletConfig

 

getServletConfig()

 

          Returns a ServletConfig object, which contains initialization and startup parameters for this servlet.

 String

 

getServletInfo()

 

          Returns information about the servlet, such as author, version, and copyright.

 void

 

init(ServletConfig config)

 

          Called by the servlet container to indicate to a servlet that the servlet is being placed into service.

初始化方法

 void

 

service(ServletRequest req, ServletResponse res)

 

          Called by the servlet container to allow the servlet to respond to a request

服务方法,是Serlvet的核心方法,当访问Servlet时,此方法执行

  2、由于直接实现Servlet接口开发比较麻烦(必须实现许多不必要的方法),所以选择Servlet接口的实现类GenericServlet,在这个开发过程中,默认实现了除service之外的其他方法,而降service方法定义为抽象方法,开发者只需要继承此类,事项service就可以开发出一个Servlet

  3、HttpServlet类继承自GenericServlet类,HttpServlet在GenericServlet类上增加Http协议的相关方法和属性,,开发者只需继承HttpServlet类,并重写相关的do.Xxx()方法,就可以完成对不同请求方式的请求处理了

 Servlet接口

|-GenericServlet抽象类

|-HttpServlet

 

  4、Servlet对外访问路径配置

    1、一个<servlet>可以配置多个<servlet-mapping>,一个<servlet-mapping>可以配置多个<url-pattern>

    2、通配符 * 的使用,配置<url-pattern>可以使用 * 号进行统配路径设置,表示0个或任意个字符:有 /*结尾的路径<url-pattern>/ThirdServlet/*</url-pattern>  |   有以 *.  后缀结尾的路径

    3、使用 * 带来了路径重复匹配问题

 

Servlet1 映射到 /abc/*

Servlet2 映射到 /*

Servlet3 映射到 /abc

Servlet4 映射到 *.do

 

当请求URL"/abc/a.html",哪个servlet响应 ?-Servlet1

当请求URL为“/abc”时,哪个servlet响应 ?-Serlvet3

当请求URL为“/abc/a.do”时,哪个servlet响应 ?-Servlet1

当请求URL为“/a.do”时,哪个servlet响应 ?-Servelt2

当请求URL为“/xxx/yyy/a.do”时,哪个servlet响应 ?-Servelt2

 

  

   总结: 配置越精细,匹配度越高,优先级越高,  *. 方式的优先级最低。

 

 5、缺省Servlet

  将<url-pattern>/</url-pattern>,则Servlet成为缺省Servlet,没有其他Servlet处理的请求都将由缺省Servlet处理,通用web.xml中自带一个Servlet,此Servlet会在被访问是先找静态资源,找到就返回,找不到就放回404页面。

  <load-on-startup>:部分Servlet需要应用启动后立即存在,则在<servlet>标签中可以配置<load-on-startup>标签,可在其中设置大于0的数字,一旦配置此标签,Servlet会在服务器加载web应用时立即创建,数字越小,启动优先级越高,缺省Servlet就配置了此标签

 6、Servlet多线程并发安全问题

  Servlet默认机制下是单例的,存在多线程并发安全问题的风险。所以在Servlet中尽量避免使用普通成员变量和静态成员变量

 

3、Servlet的创建过程和生命周期

  1、在浏览器输入网址时,需要将网址转换成IP地址,这个过程系统将会首先访问本机的Host文件,若在该网址在Host文件中不存在,则将会访问DNS服务器(DNS服务器储存所有网址的IP地址)

  2、通过Host头,可以找到唯一的主机,通过资源地址可以找到web应用,此资源地址在<url-pattern>存在,并与其对应

  3、通过<url-pattern>找到Servlet处理类,该处理类会建立requset和respones对象,将请求信息封装在requset对象中,并在处理类做出相应时使用respoes对象

  4、将respoes对象中的数据取出,组织成Htpp相应发送给客户端。

 

Servlet的生命周期:在Servlet第一次被访问时。创建出Servlet对象。创建出来后,立即调用Servlet的init方法执行初始化操作,之后存储在Servlet容器中为后续请求服务。之后所有对这份Servlet的访问都会触发此service方法进行处理。直到服务器关闭,后web应用移除出容器,Servlet随之销毁。

 

posted @ 2020-09-14 19:42  TwilightDF  阅读(115)  评论(0)    收藏  举报