Servlet---三种实现方式

本文介绍了Servlet的三种实现方式:Servlet、GenericServlet和HttpServlet,重点讲解了Servlet的生命周期、ServletConfig、HttpServletRequest与HttpServletResponse。特别指出,HttpServlet是推荐的实现方式,其覆盖了service()方法,并提供了doGet()和doPost()方法用于处理HTTP请求。

目录

1.Servlet

1.1 Servlet的生命周期(重要)

1.2 Servlet接口相关类型

2.GenericServlet  

2.1GenericServlet概述

2.2实现了ServletConfig接口

3.HttpServlet(推荐使用)

3.1 HttpServlet概述

3.2HttpServlet覆盖了service()方法

3.3doGet()和doPost()

3.4 HttpServletRequest与HttpServletResponse的方法


1.Servlet

1.1 Servlet的生命周期(重要)

描述Servlet从生到死的过程:

  1. Servlet默认创建是在第一次请求的时候创建( 第一次惩罚: 耗时多一点: 多了创建Servlet对象的过程)

  2. 调用init() 方法, 做初始化

  3. 每请求一次, Servlet的service() 执行一次, 处理用户请求

  4. 当服务器关闭时候, 先销毁该tomcat创建所有的Servlet, 销毁Servlet对象之前, 调用destroy()方法

1.2 Servlet接口相关类型

在Servlet接口中还存在三个我们不熟悉的类型:

  • ServletRequest:service() 方法的参数,它表示请求对象,它封装了所有与请求相关的数据,它是由服务器创建的;

  • ServletResponse:service()方法的参数,它表示响应对象,在service()方法中完成对客户端的响应需要使用这个对象;

  • ServletConfig:init()方法的参数,它表示Servlet配置对象,它对应Servlet的配置信息,那对应web.xml文件中的<servlet>元素。

 1.2.1ServletConfig 对应Servlet的配置

<servlet>
        <!--Servlet名称: 自定义, 推荐类名 -->
        <servlet-name>AServlet</servlet-name>
        <!--对应的Servlet类: 全限定名(包.类名)-->
        <servlet-class>com.fs.web.AServlet</servlet-class>
    </servlet>
    <!--绑定url
     Servlet类与url的映射
    -->
    <servlet-mapping>
        <servlet-name>AServlet</servlet-name>
        <!--绑定的url
            自定义
            推荐使用  /类名
            后面还有通配符 * 写法
         -->
        <url-pattern>/AServlet</url-pattern>
    </servlet-mapping>

 ServletConfig对象是由服务器创建的,然后传递给Servlet的init()方法,你可以在init()方法中使用它!

 修改web.xml文件,一定要重启服务器, 热部署失效

 1.2.2ServletRequest

ServletRequest 请求对象, 当用户发起请求时, Tomcat会为这次请求创建一个请求, 请求对象包含很多信息(客户端的信息ip,端口, 请求url,请求参数), tomcat服务器处理请求时,创建一个线程来处理, 服务器这边是多线程服务

1.2.3ServletResponse

ServletResponse: 响应对象, 当用户发起请求, tomcat除了创建请求对象,还会创建响应对象, 由服务器给客户端数据通过响应对象传递的


2.GenericServlet  

2.1GenericServlet概述

GenericServlet是Servlet接口的实现类,我们可以通过继承GenericServlet来编写自己的Servlet。  它把Servlet的其他四个方法都实现了, 把service()变成抽象方法。

2.2实现了ServletConfig接口

GenericServlet还实现了ServletConfig接口,所以可以直接调用getInitParameter()、getServletContext()等ServletConfig的方法。


3.HttpServlet(推荐使用)

3.1 HttpServlet概述

HttpServlet类是GenericServlet的子类,它提供了对HTTP请求的特殊支持,所以通常我们都会通过继承HttpServlet来完成自定义的Servlet。

3.2HttpServlet覆盖了service()方法

HttpServlet类中提供了service(HttpServletRequest,HttpServletResponse)方法,这个方法是HttpServlet自己的方法,不是从Servlet继承来的。

3.3doGet()和doPost()

在HttpServlet的service(HttpServletRequest,HttpServletResponse)方法会去判断当前请求是GET还是POST,如果是GET请求,那么会去调用本类的doGet()方法,如果是POST请求会去调用doPost()方法,这说明我们在子类中去覆盖doGet()或doPost()方法即可。

public class AServlet extends  HttpServlet {	     
  public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {	
        System.out.println("hello doGet()...");	
    }
}
 public class BServlet extends HttpServlet {	     
     public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {	
         System.out.println("hello doPost()...");	
     }
 } 

3.4 HttpServletRequest与HttpServletResponse的方法

3.4.1HttpServletRequest方法:

  • String getParameter(String paramName):获取指定请求参数的值;(重点)

  • String getMethod():获取请求方法,例如GET或POST;

  • String getHeader(String name):获取指定请求头的值;

3.4.2HttpServletResponse方法:

  • PrintWriter getWriter():获取字符响应流,使用该流可以向客户端输出响应信息。例如response.getWriter().print(“<h1>Hello JavaWeb!</h1>”);

  • ServletOutputStream getOutputStream():获取字节响应流,当需要向客户端响应字节数据时,需要使用这个流,例如要向客户端响应图片;

  • void setCharacterEncoding(String encoding):用来设置字符响应流的编码,例如在调用setCharacterEncoding(“utf-8”);之后,再response.getWriter()获取字符响应流对象,这时的响应流的编码为utf-8,使用response.getWriter()输出的中文都会转换成utf-8编码后发送给客户端;

  • void setHeader(String name, String value):向客户端添加响应头信息,例如setHeader(“Refresh”, “3;url=百度一下,你就知道”),表示3秒后自动刷新到百度一下,你就知道

  • void setContentType(String contentType):该方法是setHeader(“content-type”, “xxx”)的简便方法,即用来添加名为content-type响应头的方法。content-type响应头用来设置响应数据的MIME类型,例如要向客户端响应jpg的图片,那么可以setContentType(“image/jepg”),如果响应数据为文本类型,那么还要台同时设置编码,setContentType(“text/html;chartset=utf-8”)表示响应数据类型为文本类型中的html类型,并且该方法会调用setCharacterEncoding(“utf-8”)方法;

  • void sendError(int code, String errorMsg):向客户端发送状态码,以及错误消息。例如给客户端发送404:response(404, “就是逗你玩!”)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxmm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值