静态资源:
客户端发送请求到web服务器,web服务器从内存取到相应的文件,返回给客户端,客户端解析并渲染显示出来
动态资源: .jsp
、.asp/.aspx
、.php
请求的资源先提交web服务器>>连接数据库处理,再将内容交给web服务器>>客户端
动态资源需要在服务器端运行,响应给客户端是服务器端代码的运行结果
Servlet
相关的接口都放在javax.servlet
包中,常用接口有:
接口 | 说明 |
---|---|
Servlet | 处理请求和发送响应的过程的Java技术 |
ServletConfig | 在初始化的过程中由 Servlet容器使用 |
ServletContext | 定义在Servlet用于获取来自其容器的信息的方法 |
ServletRequest | 向服务器发送的请求信息 |
ServletResponse | 客户端请求的响应 |
ServletInputStream | 用于从客户端读取二进制数据 |
ServletOutputStream | 用于将二进制数据发送到客户端 |
Servlet
是一个用 Java 编写的程序,此程序在服务器上运行以处理客户端请求,处理请求的过程如下:
HttpServlet 类是一个抽象类,用以创建针对HTTP协议的 Servlet接口的实现类,它实现了service方法;
针对客户端不同的消息发送方式,分别调用doGet()、doPost()等方法,因此在继承HttpServlet时只需要覆盖doGet或doPost方法即可
阶段 | 时机 | 调用的方法(钩子) |
---|---|---|
实例化 | Servlet 容器创建 Servlet 的实例 | 默认构造方法 |
初始化 | 第一次向服务器发送请求或者服务器上没有servlet的时候,实例化之后 | init(config) |
服务 | 每次向服务器发送请求的时候 | service() |
销毁 | 服务停止的时候,项目重新加载的时候 | destroy () |
不可用 | 销毁实例并标记为垃圾收集 | 等待GC回收 |
Servlet的生命周期可以归纳为以下几个阶段:
装载Servlet:这项操作一般是动态执行的。有些服务器提供了响应的管理功能,可以在启动的时候就装载Servlet并能够初始化特定的Servlet。
只调用一次
当web应用处于运行阶段时,特定的servlet被客户端首次请求访问。
在web.xml文件中为servlet设置了
元素
servlet1 servlet.servlet1 0 在servlet的配置当中,
的含义是:标记容器是否在启动的时候就加载这个servlet。
5 当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。正数的值越小,启动该servlet的优先级越高。
当web应用被重新启动时,web应用中的所有servlet会在特定的时间被重新初始化。
创建一个Servlet实例。
调用Servlet的init()方法。
一个客户端的请求到达服务器。
创建一个请求对象。
创建一个响应对象。
激活Servlet的Service()方法,并传递请求和响应对象。
多次调用执行
在这个阶段servlet可以随时响应客户端的请求。当servlet容器接到访问特定的servlet请求时,servlet容器会创建针对与这个请求的servletRequest和servletResponse对象,然后调用service()方法,并把这两个对象当做参数传递给service()方法。Service()方法通过servletRequest对象获得请求信息,并处理该请求,再通过servletResponse对象生成响应结果。
不管是post还是get方法提交,都会在service中处理,然后,由service来交由相应的doPost或doGet方法处理,如果你重写了service方法,就不会再处理doPost或doGet了,如果重写sevice()方法,可以自己转向doPost()或doGet()方法
当servlet容器把servlet生成的响应结果发送给客户后,servlet容器会销毁servletRequest和sevletResponse对象。
Service()方法获得关于请求对象的信息、处理请求、访问其它资源、获得需要的信息。
Service()方法使用响应对象的方法,将响应传回服务器,最终到达客户端。
对于更多的客户端请求,服务器创建新的请求和响应对象,仍然激活此Servlet的Service()方法,将两个对象作为参数传递给它。
当服务器不再需要Servlet或当服务器关闭时,服务器将会调用Servlet的destroy()方法来销毁Servlet。
只执行一次
当Web应用被终止时,servlet容器会先调用web应用中所有的servlet对象的destroy()方法,然后在销毁servlet对象。此外容器还会销毁与servlet对象关联的servletConfig对象。
在destroy()方法的实现中,可以释放servlet所占用的资源。如关闭文件输入输出流,关闭与数据库的连接。
Request对象封装了客户端对服务器的请求信息
实现javax.servlet.http.HttpServletRequest接口
使用 HTTP 协议处理客户端的请求
ServletRequest接口封装了客户端请求的细节。它与协议无关,并指定一个HTTP的子接口。
HttpServletRequest类型的对象代表的是请求对象,父接口:ServletRequest
所在包为:javax.servlet.http
常用方法
服务器端生成响应并发送给客户端
ServletResponse将一个Servlet生成的结果传送到发出请求的客户端。ServletResponse操作主要是作为输出流及其内容类型和长度的包容器,它由Servlet引擎创建。
HttpServletResponse类型的对象代表的是响应对象,父接口ServletResponse;
HttpServletResponse代表了对客户端的Http的响应。它提供了表示状态码、状态信息和响应头标的方法,同时还负责对URL中写入一个Web页面的HTTP会话ID进行解码。JSP中的内建对象response是一个HttpServletResponse实例。
所在包为:javax.servlet.http