Servlet
Java Servlet是和平台无关的服务器端组件,它运行在 Servlet容器中。Servlet容器负责Servlet和客户的通信以及 调用Servlet的方法,Servlet和客户的通信采用 “请求/响应” 的模式。
•Servlet可完成如下功能:
– 创建并返回基于客户请求的动态HTML页面。
– 创建可嵌入到现有 HTML 页面中的部分 HTML 页面(HTML 片
段)。
– 与其它服务器资源(如数据库或基于Java的应用程序)进行通信
实现
每一个Servlet 都必须要实现Servlet 接口,GenericServlet 是个通用 的、不特定于任何协议的 Servlet ,它实现了 Servlet 接口,而HttpServlet 继承于GenericServlet,因此HttpServlet 也实现了Servlet 接口,所以我们定义的Servlet 只需要继承HttpServlet 父类即可。
Servlet 接口中定义了一个service 方法,HttpServlet 对该方法进行了实现,实现方式就是将ServletRequest 与ServletResponse 转换为HttpServletRequest 与HttpServletResponse ,转换完毕后,会调用HttpServlet 类中自己定义的service 方法,在该service 方法中,首先获得到请求的方法名,然后根据方法名调用对应的doXXX 方法,比如说请求方法为GET,那么就去调用doGet方法;请求方法为POST,那么就去调用doPost 方法。在 HttpServlet 类中所提供的 doGet、doPost 等方法都是直接返回错误信息,所以我们需要在自己定义的 Servlet 类中 override 这些方法 。
ServletRequest
ServletRequest接口中封装了客户请求信息,如客户请求方式、参数名和参数值、客户端正在使用的协议,
以及发出客户请求的远程主机信息等 。
ServletRequest接口还为Servlet提供了直接以二进制方式读取客户请求数据流的ServletInputStream。
ServletRequest的子类可以为Servlet提供更多的和特定协议相关的数据. 例如: HttpServletRequest 提供了读取HTTP Head信息的方法。
• getAttribute 根据参数给定的属性名返回属性值
• getContentType 返回客户请求数据MIME类型
• getInputStream 返回以二进制方式直接读取客户请求数据的输入流
• getParameter 根据给定的参数名返回参数值
• getRemoteAddr 返回远程客户主机的IP地址
• getRemoteHost 返回远程客户主机名
• getRemotePort 返回远程客户主机的端口
ServletResponse
ServletResponse 接口为Servlet提供了返回响应结果的方法。它允许Servlet设置返回数据的长度和MIME类型, 并且提供输出流ServletOutputStream。 ServletResponse子类可以提供更多和特定协议相关的方法。例如: HttpServletResponse 提供设定HTTP HEAD信息的方法。
• getOutputStream 返回可以向客户端发送二进制数据的输出流对象ServletOutputStream
• getWriter 返回可以向客户端发送字符数据的PrintWriter对象
• getCharacterEncoding 返回Servlet发送的响应数据的字符编码
• getContentType 返回Servlet发送的响应数据的MIME类型
• setContentType 设置Servlet发送的响应数据的MIME类型
Servlet 的生命周期
Servlet 的生命周期可以分为三个阶段:
– 初始化阶段
– 响应客户请求阶段
– 终止阶段
在javax .servlet.Servlet接口中定义了三个方法init(), service(), destroy(),它们将分别 在 Servlet 的 不 同 阶 段 被 调 用 。
初始化
在下列时刻Servlet容器装载Servlet(第一个用户请求,加载到内存中):
– Servlet容器启动时自动装载某些Servlet (修改配置,需要在web。xml配置,在<servlet>中加上<load-on-startup>任意整数</load-on-startup>)
– 在Servlet容器启动后,客户首次向 Servlet 发出请求
– Servlet的类文件被更新后,重新装载Servlet
Servlet被装载后,Servlet容器创建一个 Servlet 实例并且调用 Servlet 的init()方法进行初始化。在Servlet的整个生命周期中,init方法只会被调用一次。服务器重启后再次会被调用(转载)。
响应阶段
对于到达Servlet容器的客户请求,Servlet容器创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet 的service方法。service方法从ServletRequest对象获 得客户请求信息、处理该请求,并通过 ServletResponse对象向客户返回响应结果。
终止
当Web应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet的新实例时,Servlet容器会先调用 Servlet的destroy方法。在destroy方法 中,可以释放Servlet所占用的资源。
访问我的网页 上海驾校