Servlet学习

简介:
servlet,是运行在服务器端的程序,它是被容器调用的(如tomcat),用于处理及响应客户端的请求.
J2EE定义的是一系列的标准,没有提供实现,没有提供jar包。Tomcat中的servlet-api.jar实现了J2EEAPI标准。
类结构图:
GenericServlet 是抽象类,其中定义了抽象方法 service ()。
HttpServlet 也是抽象类,它没有抽象方法,但它实现了 service ()方法, service ()方法中又调用了 doGet ()和 doPost ()方法。 doGet ()和 doPost ()方法在 HttpServlet 类中都有默认的实现。而我们写的 servlet 程序一般都继承 HttpServlet ,重写 doGet doPost 方法。 Service ()方法被调用时会自动调用我们重写的 doGet doPost 方法,因此我们的 Servlet 程序主要任务就是重写这两个方法。
问题: 我们的 Servlet 程序中重写了 doGet ()和 doPost ()方法, service ()方法是怎么调用到我们写的 doGet ()和 doPost ()方法的?
解答:这里面用到了多态,重写和继承都有了,那么父类引用指向子类对象是怎么体现的呢? service 方法是被容器中我们写的 Servlet 类的实例调用的,而父类 HttpServlet 中又调用了 this. doGet ()和 this. doPost ()方法,这时就有了父类引用指向子类对象了: this HttpServlet -> 我们的 Servlet 实例。附上一个图作为说明:
 
问题: service ()方法什么时候被调用?
解答: 当客户端发出请求的时候,容器调用 service  方法并传递一个请求和响应对象。 Servlet 首先判断该请求是 GET  操作还是 POST  操作。然后它调用下面的一个方法: doGet   doPost 。如果请求是 GET 就调用 doGet 方法,如果请求是 POST 就调用 doPost 方法。
下面看看 servlet 的生命周期:
1 、客户端发送一个请求 ( 也就是一个 servlet 的访问 URL)
2 、服务器端解析请求(通过 web.xml 里面的 servlet 配置解析)
3 servlet 容器创建 servlet 的一个实例
   4 、容器调用该实例的 init() 方法
   5 、如果容器对该 servlet 有请求,则调用此实例的 service() 方法
6 、返回响应消息给 servlet 容器
7 、返回响应消息给客户端
      8 、容器在销毁本实例前调用它的 destroy() 方法
   9 、销毁并标记该实例以供作为垃圾收集
protected void  doGet(HttpServletRequest req, HttpServletResponse resp)
HttpServletRequest  req 封装了客户端到服务器端的请求,在服务器端(即我们编写的 Servlet )中可以通过 req 获取这些请求信息。
HttpServletResponse resp 从服务器端返回给客户端的对象,也就是我们往 resp 中写消息就可以放松给客户端了。
 
问题: Servlet 容器(如 tomcat )怎样调用我们写的相应 servlet
解答:对了,在 web.xml 里面配置。如:
< servlet > 
     < servlet-name >hw </ servlet-name > 
     < servlet-class >com.dvnchina.test.HelloWorldServlet </ servlet-class > 
     </ servlet > 
     < servlet-mapping > 
     < servlet-name >hw </ servlet-name > 
     < url-pattern >/helloservlet </ url-pattern > 
</ servlet-mapping > 
 
这时客户端通过 http://127.0.0.1:8080/ServletTest/helloservlet 发送请求,就可以调用 hw 这个 servlet ,当 hw 被调用后就容器就自动调用 hw service ()方法,而 hw 实例从 HttpServlet 继承的 service ()方法中又调用了 doGet ()和 doPost ()方法,此时根据多态就调用了我们 servlet 中写的 doGet ()和 doPost ()方法。
 
通常一个 servlet servlet 容器中只有一个实例。具体解析请参见:http://java999.blog.51cto.com/259217/163702









本文转自 yzzh9 51CTO博客,原文链接:http://blog.51cto.com/java999/163704,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
小程序 Java 应用服务中间件
【JavaWeb学习】—Servlet(十三)
【JavaWeb学习】—Servlet(十三)
|
11月前
|
XML Java 应用服务中间件
都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet(二)
都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet(二)
144 0
|
11月前
|
Java 应用服务中间件 UED
都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet(一)
都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet(一)
138 0
|
XML 缓存 前端开发
Java学习之路006——Servlet开发
包括引入servlet的api库、IDEA2022配置servlet有关操作,以及servlet的xml配置与注解使用;以及简单的servlet编程实现。
143 0
Servlet学习(九):请求重定向(例如:页面搬迁后的跳转)
Servlet学习(九):请求重定向(例如:页面搬迁后的跳转)
Servlet学习(九):请求重定向(例如:页面搬迁后的跳转)
Servlet学习(八):请求转发(两个servlet程序的交互)
Servlet学习(八):请求转发(两个servlet程序的交互)
110 0
Servlet学习(八):请求转发(两个servlet程序的交互)
Servlet学习(七):获取请求的参数值(简单的前后端交互)
Servlet学习(七):获取请求的参数值(简单的前后端交互)
102 0
Servlet学习(七):获取请求的参数值(简单的前后端交互)
Servlet学习(六):ServletContext对象的作用
Servlet学习(六):ServletContext对象的作用
Servlet学习(六):ServletContext对象的作用
Servlet学习(五):ServletConfig类的作用
ServletConfig的作用: 1、可以获取Servlet程序的别名servlet-name的值 2、获取初始化参数init-param 3、获取ServletContext对象
109 0
Servlet学习(五):ServletConfig类的作用
Servlet学习(四):请求的分发处理
Servlet学习(四):请求的分发处理