HttpServlet详解

大家都知道Servlet,但是不一定很清楚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首先必须读取Http请求的内容。Servlet容器负责创建HttpServlet对象,并把Http请求直接封装到HttpServlet对象中,大大简化了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客户。

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

1)扩展HttpServlet抽象类; 
2)覆盖HttpServlet的部分方法,如覆盖doGet()或doPost()方法; 
3)获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串; 
4)生成HTTP响应结果。通过HttpServletResponse对象生成响应结果,它有一个getWriter()方法,该方法返回一个PrintWriter对象。

举个例子如下:

 package cn.leo.soft;
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. bt协议详解 基础篇(下)

    bt协议详解 基础篇(下) 最近开发了一个免费教程的网站,产生了仔细了解bt协议的想法,所以写了这一篇文章,后续还会写一些关于搜索和索引的东西,都是在开发这个网站的过程中学习到的技术,敬请期待. 1 ...

  3. bt协议详解 基础篇(上)

    bt协议详解 基础篇(上) 最近开发了一个免费教程的网站,产生了仔细了解bt协议的想法,所以写了这一篇文章,后续还会写一些关于搜索和索引的东西,都是在开发这个网站的过程中学习到的技术,敬请期待. 1 ...

  4. 解析Tomcat之HttpServlet详解

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

  5. 重装Windows系统 入门详解 - 基础教程

    重装Windows系统 入门详解 - 基础教程 JERRY_Z. ~ 2020 / 10 / 13 转载请注明出处!️ 目录 重装Windows系统 入门详解 - 基础教程 一.说明 二.具体步骤 ( ...

  6. iOS开发 - OC - block的详解 - 基础篇

    深入理解oc中的block 苹果在Mac OS X10.6 和iOS 4之后引入了block语法.这一举动对于许多OC使用者的编码风格改变很大.就我本人而言,感觉block用起来还是很爽的,但一直以来 ...

  7. vue技术栈进阶(02.路由详解—基础)

    路由详解(一)--基础: 1)router-link和router-view组件 2)路由配置 3)JS操作路由

  8. Spark入门到精通--(第二节)Scala编程详解基础语法

    Scala是什么? Scala是以实现scaleable language为初衷设计出来的一门语言.官方中,称它是object-oriented language和functional languag ...

  9. HttpServlet 详解(注!仿)

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

随机推荐

  1. goldengate简单配置

    goldendate配置单项同步 源数据库    extract抽取进程 trail文件 复制进程 目标进程 由于最开始配置goldengate的时候,没有弄清除原理,导致出错了都不知道怎么解决. 最 ...

  2. sql中查询某月某年内的记录

    假设表结构:用户名,日期,上班时间,下班时间.8月份记录:select * from 表名 where month(日期)=8 and 用户名 = '小张'8月份迟到早退次数:select sum(i ...

  3. jar下载地址

    java开发难免需要下载额外的jar,推荐一个地址 http://www.java2s.com/Code/Jar/CatalogJar.htm

  4. react中如何获取onclick事件调用元素的dom对象

    今天终于有时间写博客了, 前几天项目有个需求,我感觉用dom操作兄弟元素实现比较方便,但是前端用的react框架不能用jquery的$(this)获取当前元素,查了好多资料和尝试后写下总结: 在HTM ...

  5. 我一个自己的关于II和&&的逻辑判断(傻逼型)

    原因 首先概述下起始原因:本来埋点的数据中传递来的URL只有http://开头的数据,所以上一个编写此程序的人在定义产品ID和出发口岸时加了这样的判断 然后...悲剧(傻逼)开始了 因为业务需求,埋点 ...

  6. Linux下安装spf13-vim

    前言 spf13-vim是一个集成多个非常好用的vim插件的集合,对于在众多插件中不知道该怎么做选择,并且为各个插件的安装而头疼的我们提供了一个很好的工具,让我仅仅需要安装和配置一次就能拥有众多优秀的 ...

  7. 树莓派3B+学习笔记:13、不间断会话服务screen

    screen是一款能够实现多窗口远程控制的开源服务程序,简单来说就是为了解决网络异常中断或为了同时控制多个远程终端窗口而设计的程序.用户还可以使用screen服务程序同时在多个远程会话中自由切换,能够 ...

  8. 树莓3B+_root密码开启

    开启root用户的方法:1.设置密码:sudo passwd2.sudo passwd --unlock root3.root用户登录:su

  9. 20190313-时间和日期-Time

    概述 在Python中,与时间处理相关的模块有:time.datetime以及calendar,Python中通常有这几种方式表示时间:时间戳.格式化的时间字符串.时间元组(struct_time 共 ...

  10. IDEA新建Web项目

    file->New project->输入项目名(例如这里输入HelloWeb) 选择JDK为合适版本->next ->finish即可 在新建的项目HelloWorld上右击 ...