Servlet及其一些细节

     servlet是有sun公司提供的动态web开发技术,servlet接口有五个方法(1)init(ServletConfig config),servlet在被初始化时调用,初始化servlet;(2)getServletInfo() ,得到servlet的基本信息;(3)getServletConfig() ,获取servlet启动信息;(4)service(ServletRequest req, ServletResponse res),响应客户端请求;(5)destroy() ,servlet销毁时调用。
      一、servlet生命周期、工作流程。
      (1)初始化阶段,调用init()方法;(2)响应客户请求阶段,调用service()方法;(3)终止阶段,调用destroy()方法。
        其工作流程:(1)浏览器根据地址连上服务器,并发送Http请求;(2)服务器根据Http请求解析出客户端想访问的主机名、web应用、web资源;(3)若servlet第一次被访问,创建servlet实例对象,并根据配置信息,调用init()方法初始化servlet对象;(4)服务器创建代表请求的request对象和代表响应的response对象,并调用servlet的service()方法处理请求;(5)servlet的service()方法执行,并向response写入响应数据;(6)服务器取出response内数据,并构建Http响应信息,回写客户端;(7)浏览器根据Http响应数据,提取显示。
      servlet的子类有GenericServlet和HttpServlet两个,GenericServlet是serlvet的实现类,而HttpServlet是GenericServlet的子类,由于HttpServlet是用来处理Http请求的servlet,并添加了处理各种请求方式的方法,所以在编写servlet时,基本继承HttpServlet。

      二、servlet开发中一些细节。
     (1)由于客户端通过URL地址访问web服务器中的web资源,所以servlet若想被外界访问,必须将其映射到一个URL地址上。若通过Eclipse开发在新建servlet时Eclipse会自动在web.xml文件中完成,但若是copy的servlet则需要手动完成,
<servlet>
    <servlet-name>RegisterUIServlet</servlet-name>   设置servlet友好名称
    <servlet-class>cn.netjava.web.UI.RegisterUIServlet</servlet-class> servlet完整类名
  </servlet>
<servlet-mapping>
    <servlet-name>RegisterUIServlet</servlet-name>  
    <url-pattern>/servlet/RegisterUIServlet</url-pattern>  设置servlet对外访问路径
 </servlet-mapping>

     (2)同一个servlet可以映射到多个URL地址上,即多个<servlet-mapping>元素的子元素<servlet-name>可以是同一个servlet注册名。另外,在servlet映射到URL中也可以使用通配符,但只有两种固定形式,一种格式"*.扩展名",一种以"/"开头并以"/*"结尾。比如, <url-pattern>*.html</url-pattern>,则无论访问web应用的任何html资源都是访问此servlet; <url-pattern>/*</url-pattern>,则无论访问web应用的任何资源都是访问此servlet。(另外,web.xml改动无需重新启动服务器)
      (3)
     servlet1 映射到/abc/*
     servlet2 映射到/*
     servlet3 映射到/abc
     servlet4 映射到*.do。
这就出现访问冲突,比如当访问/abc/a.html时servlet1和servlet2都匹配,但响应的是servlet1,因为servlet1的映射URL和/abc/a.html更接近。当访问/abc/a.do时servlet1、servlet2和servlet4都匹配,但响应的是servlet1,*在前优先级别低。
     (4)针对客户端多次servlet请求,通常情况下,服务器只会创建一个servlet对象,并将其存在内存中,直至web容器退出,servlet实例对象才被销毁。而对于每次servlet请求,servlet引擎都调用一次servlet的service方法。对于每次访问请求,servlet引擎都会创建一个新的HttpServletRequest和HttpServletResponse对象,用于调用service方法。
       (5)如果在<servlet>元素中配置一个<load-on-startup>元素,那么web应用程序在启动时,就会装载并创建servlet对象,并调用init()方法。其中<load-on-startup>元素中写入的数字越小,其优先级别越高。
       (6)如果某个servlet的映射路径仅为"/",那么这个servlet就为当前web应用的缺省servlet。如此,凡是在web.xml文件中找不到匹配的URL,它们的访问请求都交给缺省servlet处理。

你可能感兴趣的:(Web,servlet)