Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类.在javax.servlet.http包中定义了采用HTTP通信协议的HttpServlet类.

Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口.在Servlet接口中定义了5个方法,其中有3个方法代表了Servlet的声明周期:

init方法,负责初始化Servlet对象
service方法,负责相应客户的请求
destory方法,当Servlet对象退出声明周期时,负责释放占有的资源

当Web容器接收到某个Servlet请求时,Servlet把请求封装成一个HttpServletRequest对象,然后把对象传给Servlet的对应的服务方法.

HTTP的请求方式包括DELETE,GET,OPTIONS,POST,PUT和TRACE,在HttpServlet类中分别提供了相应的服务方法,它们是,doDelete(),doGet(),doOptions(),doPost(), doPut()和doTrace().

HttpServlet的功能

HttpServlet容器响应Web客户请求流程如下:

1)Web客户向Servlet容器发出Http请求;

2)Servlet容器解析Web客户的Http请求;

3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;

4)Servlet容器创建一个HttpResponse对象;

5)Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;

6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;

7)HttpServlet调用HttpResponse的有关方法,生成响应数据;

8)Servlet容器把HttpServlet的响应结果传给Web客户。

下面介绍HTTP请求和响应,一个HTTP请求包含请求方法,请求URL,头字段和请求体.HTTP1.1定义了下面的请求方法:

1. GET :获取由请求URL标识的资源

2. POST :向Web服务器发送无限制长度的数据

3. PUT :存储一个资源到请求的URL

4. DELETE :删除由URL标识的资源

5. HEAD :返回URL标识的头信息

6. OPTIONS :返回服务器支持的HTTP方法

7. TRACE :返回TRACE请求附带的头字段

HTTP响应包括响应码,头字段和响应体.HTTP协议要求响应码和所有的头字段都在任何响应体之前返回.

下面就对Servlet各个服务方法做以介绍.

1. doGet() :调用服务器的资源,并将其作为响应返回给客户端.doGet()调用在URL里显示正在传送给Servlet的数据,这在系统的安全方面可能带来一些问题,比如说,用户登录时, 表单里的用户名和密码需要发送到服务器端,doGet()调用会在 浏览器的URL里显示用户名和密码.

2. doPost() :它用于把 客户端的数据传给 服务端,使用它可以以隐藏方式给服务器端发送数据.Post适合发送大量数据.

3. doPut() :调用和doPost()相似,并且它允许客户端把真正的文件存放在服务器上,而不仅仅是传送数据.

4. doDelete() :它允许客户端删除服务器端的文件或者Web页面.它的使用非常少.

5. doHead() :它用于处理客户端的Head调用,并且返回一个response.当客户端只需要响应的Header时,它就发出一个Header请求.这种情况下客户端往往关心响应的长度和响应的MIME类型.

6. doOptions():它用于处理客户端的Options调用,通过这个调用,客户端可以获得此Servlet支持的方法.如果Servlet覆盖了doPost()方法,那么将返回:

Allow:POST,TRACE,OPTIONS,HEAD

一般情况下不需要覆盖这个方法.

创建HttpServlet的步骤——“四部曲”

1)扩展HttpServlet抽象类;

2)覆盖HttpServlet的部分方法,如覆盖doGet()或doPost()方法;

3)获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串;

4)生成HTTP响应结果。通过HttpServletResponse对象生成响应结果,它有一个getWriter()方法,该方法返回一个PrintWriter对象。

举个例子如下:

package mypack;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class HelloServlet extends HttpServlet//第一步:扩展HttpServlet抽象类 
{
 //第二步:覆盖doGet()方法
 public void doGet(HttpServletRequest request,
  HttpServletResponse response)throws IOException,ServletException{
  //第三步:获取HTTP请求中的参数信息
  String clientName=request.getParameter("clientName");
  if(clientName!=null)
   clientName=new String(clientName.getBytes("ISO-8859-1"),"GB2312");
  else
   clientName="我的朋友";

//第四步:生成HTTP响应结果
  PrintWriter out;
  String title="HelloServlet";
  String heading1="HelloServlet的doGet方法的输出:";
  //set content type
  response.setContentType("text/html;charset=GB2312");
  //write html page
  out=response.getWriter();
  out.print("<HTML><HEAD><TITLE>"+title+"</TITLE>");
  out.print("</HEAD><BODY>");
  out.print(heading1);
  out.println("<h1><p>"+clientName+":您好</h1>");
  out.print("</BODY></HTML>");

out.close();
 }
}

在web.xml中添加

<servlet>
   <servlet-name>HelloServlet</servlet-name>
   <servlet-class>mypack.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>HelloServlet</servlet-name>
   <url-pattern>/hello</url-pattern>
</servlet-mapping>

通过URL访问HelloServlet:

注意:

实现service方法。

Servlet的主要功能是接受从浏览器发送过来的HTTP请求(request),并返回HTTP响应(response)。这个工作是在service方法中完成的。service方法包括从request对象获得客户端数据和向response对象创建输出。

如果一个Servlet从javax.servlet.http.HttpServlet继承,实现了doPost或doGet方法,那么这个Servlet只能对POST或GET做出响应。如果开发人员想处理所有类型的请求(request),只要简单地实现service方法即可(但假如选择实现service方法,则不必实现doPost或doGet方法,除非在service方法的开始调用super.service())。

HttpServlet 详解(注!仿)的更多相关文章

  1. 【转】HttpServlet详解

    [转]HttpServlet详解 Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servl ...

  2. HttpServlet 详解(基础)

    HttpServlet详解 大家都知道Servlet,但是不一定很清楚servlet框架,这个框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在java ...

  3. 解析Tomcat之HttpServlet详解

    解析Tomcat之HttpServlet详解 Servlet的框架是 由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所 ...

  4. HttpServlet详解

    http://www.cnblogs.com/panjun-Donet/archive/2010/02/22/1671290.html Servlet的框架是由两个Java包组成:javax.serv ...

  5. SNMP 原理与实战详解

    原文地址:http://freeloda.blog.51cto.com/2033581/1306743 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法 ...

  6. Python安装、配置图文详解(转载)

    Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境(I ...

  7. MySQL 日志管理详解

    大纲 一.日志分类 二.日志详解 注:MySQL版本,Mysql-5.5.32(不同版本的mysql变量有所不同) 一.日志分类 错误日志 查询日志 慢查询日志 二进制日志 中继日志 事务日志 滚动日 ...

  8. 实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解

    注意:这里不会讲到nginx流媒体模块如何安装的问题,只研究rtmp,hls直播和录制相关的nginx服务器配置文件的详细用法和说明.可以对照这些命令详解配置nginx -rtmp服务 一.nginx ...

  9. Tarjan求有向图强连通详解

    Tarjan求有向图强连通详解 注*该文章为转发,原文出处已经不得而知 :first-child { margin-top: 0; } blockquote > :last-child { ma ...

随机推荐

  1. 解决JS浮点数(小数)计算加减乘除的BUG

    在JavaScript中输出下面这些数值(注意不能作为字符串输出):0.1000000000000000000000000001(28位小数).0.10000000000000000000000000 ...

  2. ACM 汉诺塔(三)

    汉诺塔(三) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度 ...

  3. ACM 一种排序

    一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数 ...

  4. [知识点]KMP算法

    // 此博文为迁移而来,写于2015年5月24日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w1iw.html 1.前 ...

  5. js+css立体旋转

    纯 CSS3 制作可口可乐罐  这个效果相信大家很多人看过了,纯css实现的立体可口可乐罐,看起来相当高大上~ 于是今天我这小菜鸟试着研究下,稍微遗憾的是,没有看到源码,还是直接F12吧,貌似实现也不 ...

  6. iOS 让启动页面延迟的方法

    <1> 利用多线程的方法:[NSThread sleepForTimeInterval:300];

  7. html5 可以讓使用者輸入url網址 ,去play影片

    <html> <head> <title>Simple Video Example</title> <script> function pl ...

  8. Go语言练习:网络编程实例——简易图片上传网站

    1.代码结构 2.运行实例 1.代码结构 $ tree . ├── photoweb.go ├── public │   ├── css │   ├── images │   └── js ├── u ...

  9. vim 使用笔记

    vim命令笔记 a 插入 insert 插入 :%!xxd 以16进制方式进行编辑 :%!xxd -r 从16进制还原

  10. Hibernate学习笔记2

    hibernate.cfg.xml文件配置中: <property name="hibernate.hbm2ddl.auto">update</property& ...