Servlet学习的常见问题与解答

开发 后端
Servlet学习中会遇到一些常见问题的,那么针对这些在Servlet学习中的常见问题本文给你一个答案。

Servlet学习的开始我们先要明白什么是Servlet,它是运行在服务器端的程序,它是被容器调用的(如tomcat),用于处理及响应客户端的请求.

J2EE定义的是一系列的标准,没有提供实现,没有提供jar包。Tomcat中的servlet-api.jar实现了J2EE的API标准。

类结构图:

Servlet学习之Servlet类图

GenericServlet是抽象类,其中定义了抽象方法service()。

Servlet学习中碰到HttpServlet也是抽象类,它没有抽象方法,但它实现了service()方法,service()方法中又调用了doGet()和doPost()方法。doGet()和doPost()方法在HttpServlet类中都有默认的实现。而我们写的servlet程序一般都继承HttpServlet,重写doGet和doPost方法。Service()方法被调用时会自动调用我们重写的doGet或doPost方法,因此我们的Servlet程序主要任务就是重写这两个方法。

问题:我们Servlet学习时候,当Servlet程序中重写了doGet()和doPost()方法,service()方法是怎么调用到我们写的doGet()和doPost()方法的?

解答:这里面用到了多态,重写和继承都有了,那么父类引用指向子类对象是怎么体现的呢?service方法是被容器中我们写的Servlet类的实例调用的,而父类HttpServlet中又调用了this.doGet()和this.doPost()方法,这时就有了父类引用指向子类对象了:this(HttpServlet)-﹥我们的Servlet实例。附上一个图作为说明:

Servlet学习之Servlet实例图 


问题:Servlet学习时service()方法什么时候被调用?

解答:当客户端发出请求的时候,容器调用service 方法并传递一个请求和响应对象。Servlet首先判断该请求是GET 操作还是POST 操作。然后它调用下面的一个方法:doGet 或 doPost。如果请求是GET就调用doGet方法,如果请求是POST就调用doPost方法。

Servlet学习过程中要注意看看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学习中Servlet容器(如tomcat)怎样调用我们写的相应Servlet?

解答:对了,在web.xml里面配置。如:

  1. ﹤servlet﹥   
  2.     ﹤servlet-name﹥hw﹤/servlet-name﹥   
  3.     ﹤servlet-class﹥com.dvnchina.test.HelloWorldServlet﹤/servlet-class﹥   
  4.     ﹤/servlet﹥   
  5.     ﹤servlet-mapping﹥   
  6.     ﹤servlet-name﹥hw﹤/servlet-name﹥   
  7.     ﹤url-pattern﹥/helloservlet﹤/url-pattern﹥   
  8. ﹤/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在Servlet容器中只有一个实例。那么通过上面的对于Servlet学习中的各种问题的解答,希望你对Servlet学习充满信心。
 

【编辑推荐】

  1. 在JSP中获取数据库连接
  2. 简化JSP表达式中代码
  3. Servlet的运行环境配置浅谈
  4. Servlet页面跳转实现方法的区别
  5. Servlet多线程的相关问题浅析
责任编辑:仲衡 来源: 51CTO技术博客
相关推荐

2010-04-23 09:58:30

Oracle管理

2010-03-25 09:08:43

CentOS配置

2010-07-21 09:16:47

Perl常见问题

2010-04-28 11:09:47

Oracle常见问题

2010-04-27 18:24:56

Oracle常见问题

2009-11-09 10:42:53

ibmdwRational

2009-06-14 22:28:14

ibmdwWebSphere

2009-10-13 14:56:00

CCNA培训

2011-07-13 17:57:15

SQLite

2009-07-29 10:03:24

思科网络管理Cisco

2009-04-13 11:42:29

IBMdWRational

2010-09-13 14:43:47

无线技术常见问题

2011-08-09 15:10:00

SQLite

2023-10-10 08:01:13

2013-05-23 09:49:49

Chrome for google

2012-12-06 10:24:21

Saliency MaMATLAB

2011-07-21 11:19:51

JAVA

2010-12-27 14:50:16

Windows 部署服

2010-05-12 17:04:20

BlackBerry开

2021-11-14 15:46:45

Windows 11Windows微软
点赞
收藏

51CTO技术栈公众号