[基于达内教育的学习,总结提炼]

概念: sun公司提供的一门开发动态WEB资源的技术.

开发步骤:

1.创建一个Servlet

        方法1)自定义一个类,实现Servlet接口

        方法2)自定义一个类,继承HttpServlet. 重写doGet()或doPost()方法,提供应答逻辑

2.在WEB应用的web.xml中进行配置

        <servlet>

                <servlet-name>TestServlet</servlet-name>

                <servlet-class>servlet.TestServlet</servlet-class>

        </servlet>

        <servlet-mapping>

                <servlet-name>TestServlet</servlet-name>

                <url-pattern>/servlet/TestServlet</url-pattern>

        </servlet-mapping>

       其中, servlet-class 中为配置servlet类的全路径名. servlet-name 为该servlet配置的名称. url-pattern 为该servlet配置对外的访问路径,浏览器可以通过此路径进行访问此servlet.

Servlet的继承结构

1.Servlet接口

init(),   destory(),   service(),   getServletConfig(),   getServletInfo()

2.GenericServlet

1) 实现了Servlet接口

2) 提供了除service()方法以外的其他方法的实现

3) 降低了程序员的编程门槛

3.HttpServlet

1) 继承了GenericServlet

2) 提供了基于Http协议的相关支持

3) 实现了service方法 ---- 在方法中将ServletRequest和ServletResponse强转换为HttpServletRequest和HttpServletResponse.  调用了自己提供的一个service(HttpServletRequest req,HttpServletResponse resp)方法

4) 自己提供了一个service方法 --- 通过req对象,获取了用户的请求方式(get/post/put...), 根据用户的请求方式,调用对应的doXXX方法

5) 进一步降低了程序员的编程门槛,程序员仅需要重写doXXX方法,提供应答逻辑即可

Servlet映射的虚拟路径

1) 映射一个虚拟路径

2) 通过*通配符,映射多个虚拟路径. 需要注意的是: 哪个最像找哪个,  *.后缀的优先级永远最低.

Servlet1 映射到 /abc/* 
Servlet2 映射到 /* 
Servlet3 映射到 /abc 
Servlet4 映射到 *.do 
        
当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应
            Servlet引擎将调用Servlet1。
当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应
            Servlet引擎将调用Servlet3。
当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应

            Servlet引擎将调用Servlet1。
当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
            Servlet引擎将调用Servlet2。

Servlet的调用过程和生命周期

Servlet调用过程

在浏览器中输入http://localhost/test/servlet/TestServlet

1) 首先浏览器先去寻找Hosts文件, 并将主机名翻译为IP地址, 若没有没有找到, 则在dns服务器将主机名翻译为IP地址.

2) 浏览器根据IP地址和端口号访问服务器,组织http请求信息发送给服务器.

3) 服务器收到请求后, 根据Host请求头判断当前访问是哪台虚拟主机.  ---->   当前访问的是localhost虚拟主机

4) 服务器根据http请求头中的请求URL判断当前访问的是哪个Web应用  ---->  当前访问的是test应用.

5) 服务器根据http请求头中的请求URL判断当前访问的是哪个Web应用中的哪个Web资源.  ---->  当前访问的是/servlet/TestServlet资源

6) 检查Web应用的web.xml文件,如果根据路径找到具体的servlet处理类的全路径名交给该servlet处理. 如果未找到, 则交给缺省的serlvet处理.

7) 此过程中,浏览器只需要发出自己的http请求,之后就收到了服务器发来的http响应, 浏览器不需要知道服务器内部如何处理. 浏览器和服务器两者只存在HTTP协议.

8) 开发者只需要把写好的servlet配置放入容器中即可, 其他操作服务器自动运行.

Servlet生命周期

Servlet在第一次被访问时创建, 创建后init方法执行进行初始化操作, 从此以后这个servlet一直驻留在内存中为后续的对这个servlet的请求服务, 每次请求都会导致service方法执行, 直到服务器停止或web应用从服务器中移除, 随着web应用的销毁, servlet对象跟着被销毁, 在销毁之前, 服务器调用destroy方法执行一些善后的操作

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐