学习之Servlet详细

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所占用的资源。 

访问我的网页 上海驾校​​​​​​​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值