1、什么是Servlet
    Servlet是用Java编写的服务端程序,它与协议和平台无关,运行于支持Java的应用服务器中,Java Servlet可以动态的扩展服务器的能力,并采用请求-响应模式提供web服务。最早支持Servlet技术的是javaSoft 的Java web server。此后一些其他的基于Java 的web server开始支持标准的Servlet API。Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。
    
2、Servlet交互式的浏览和修改数据,生成动态的web内容的过程
1)客户端发送请求信息到服务器端
2)服务器将请求信息发送到Servlet
3)Servlet生成响应内容并将其传给Server。响应内容动态生成,通常取决于客户端的请求
4)服务器将响应返回给客户端

3、Servlet的优势
1)Servlet可以和其他的资源比如说:文件、数据库、Applet、Java应用程序交互,以生成返回给客户端的响应内容。如果需要,还可以保存请求-响应过程中的信息;
2)采用Servlet 可以完全授权对本地资源的访问(如数据库),并且Servlet自身将会控制外部用户的访问数量及访问性质;
3)Servlet可以是其他服务的客户端程序例如,它们可以用于分布式的应用系统中,可以从本地硬盘,或者通过网络从远端硬盘激活Servlet;
4)Servlet可被链接(chain)。一个Servlet可以调用另一个或一系列Servlet,即成为它的客户端;
5)采用 Servlet Tag技术,可以在HTML页面中动态调用Servlet;
6)Servlet 独立于平台和协议;
7)Servlet 提供了Java应用程序的所有优势——可移植、稳健、易开发。使用Servlet 的Tag技术,Servlet能够生成嵌于静态HTML页面中的动态内容;
8)一个Servlet被客户端发送第一个请求激活,然后它将继续运行于后台,等待以后的请求,每个请求将生成一个新的线程,而不是一个完整的进程。多个客户能够在同一个进程中同时得到服务。一般来说,Servlet进程只是在Web Server卸载时被卸载;

4、谈谈对Servlet独立于平台和协议的理解
1)Servlet 是一种服务器端的Java应用程序,Java语言具有平台无关性,所以说Servlet独立于平台。Java Servlet API定义了一个 Servlet和Java使能服务器(Servlet 容器)之间的一个标准接口,这使得Servlet具有跨平台的特性。
2)Servlet不对具体的协议实现,可以接受自定义协议,常用的WEB项目HttpServlet 是对HTTP协议的实现,我们可以像HttpServlet一样扩展GenericServlet 来实现FtpServlet,TelnetServlet等
备注(了解): Java httpServlet和GenericServlet类的区别:httpServlet是GenericServlet的子类,GenericServlet是个抽象类,必须给出子类才能实例化。它给出了设计servlet的一些骨架,定义了servlet生命周期,还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关的,也就是说你有可能用非http协议实现它(其实目前Java Servlet还是只有Http一种)。
HttpServlet是子类,当然就具有GenericServlet的一切特性,还添加了doGet, doPost, doDelete, doPut, doTrace等方法对应处理http协议里的命令的请求响应过程。一般没有特殊需要,自己写的Servlet都扩展HttpServlet

5、Servlet的生命周期
粗粒度理解Servlet的声明周期:
1)装载Servlet,一般是动态执行的。然而Server(服务器)通常会提供一个管理的选项,用于在Server启动时强制装载和初始化特定的Servlet
2)Server(服务器)创建一个Servlet的实例
3)Server调用Servlet的init()方法
4)一个客户端发送请求到server(服务器),服务器会创建一个request(请求对象)和response响应对象,server(服务器)激活Servlet的service()方法,传递请求和响应对象作为参数。
备注: service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息,service()方法使用响应对象的方法,将响应传回给Server,最终到达客户端,service()方法可能激活其他方法以处理请求,如doGet()和doPost()或程序员开发的新方法
5)对于更多客户端的请求,Server创建新的请求和响应对象,仍然激活此Servlet的Server()
方法,将两个对象作为参数传递给它如此重复以上的循环,但无需再次调用init()方法。如此重复以上的循环,但无需再次调用init()方法。,当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。

细粒度理解Servlet的生命周期:
1)用户在浏览器地址栏上输入   URL:http://localhost:8080:/prj-servlet-03/testLifeCycle
2) web容器的截取请求路径:/prj-servlet-03/testLifeCycle;
3) web容器在容器上下文中找请求路径/prj-servlet-03/testLifeCycle对应的servlet对象;
4)若没有找到对应的Servlet对象则
    4.1)通过web.xml文件中相关的配置信息,得到请求路径/testLifeCycle对应的Servlet完整类名
    4.2)通过反射机制,调用Servlet类的无参数构造方法完成Servlet对象的实例化
    4.3)web容器调用Servlet对象的init方法完成初始化的操作
    4.4)web容器调用Servlet对象的service方法提供服务;
5)若找到找到对应的Servlet对象
5.1)web容器直接调用Servlet对象的Service方法提供服务;
6)web容器关闭的时候或者webapp重新部署的时候或者该Servlet对象长时间没有用户访问的时候web容器会将该Servlet对象销毁,在销毁该对象之前,web容器会调用Servlet对象的destory方法完成销毁之前的准备。

6、Java web程序员需要做什么
Server(服务器)和Servlet(sun公司的接口)这些都有不用你写,程序员值需要做:
1)  写一个类是实现Servlet接口(sun公司提供的)
2)  把这个类和路径写到配置文件中,服务器会自动调到这个类里面的方法

7、Web应用中涉及到的路径
1)  html页面的超链接路径:

<html>
    <head>
      <title>welcome page</title>
</head>
<body>
<a href="/prj-servlet-02/system/list">显示员工信息</a>
或者
<form action=”/项目名字/资源路径名”>
备注:该路径必须以“/”开始,需要添加工程的名字,/system/list必须和web.xml文件中配置的<url-pattern>/system/list</url-pattern>的路径一直。
</body>
</html>
View Code

相关文章:

  • 2022-01-06
  • 2022-12-23
  • 2022-01-17
  • 2021-08-07
  • 2021-10-19
  • 2022-01-05
  • 2021-11-11
猜你喜欢
  • 2021-11-24
相关资源
相似解决方案