javaweb

Java后台开发——Servlet篇

2017-03-09  本文已影响0人  BeYanJin

参考资料

《JSP从零开始》—— 刘鑫
Servlet官方文档
孤傲苍狼 博客园

前言

本人菜鸟,入IT只为当鼓励师。本编文章对 Servlet 作简要介绍,其中包括讲解:Servlet是什么、Servlet的功能、Servlet的生命周期、HttpServlet对象。

一、Servlet是什么

说简单点,就是Sun公司开发出了一套API(java.servletjava.sevlet.http等),你可以用这些api开发Java程序,用来处理客户端请求,并控制输出的响应(向客户端浏览器输出的内容)。

servlet api

总结起来,你只需要:
① 编写一个实现了servlet接口的java类;
② 把开发好的Java类部署到web服务器中。

所以,有时我们也称实现了servlet接口的java程序为Servlet。

二、Servlet的功能

三、Servlet的生命周期

Servlet的生命周期包含3个阶段:

1. 初始化阶段

当web服务器收到客户端对某一url地址的访问请求时,若该url配置了对应的Servlet程序,则开始该阶段。


检查请求url是否有对应的Servlet程序

2. 运行阶段

该阶段实际响应客户端的请求。

每当有请求时,服务端的一系列动作 调用 service() 方法,可访问请求和响应对象 运用request对象读取请求信息,处理后运用response对象写入响应信息 service() 方法返回 服务器读取响应信息 服务器发出http响应,将数据返回到客户端浏览器中

3. 消亡阶段

四、创建Servlet的步骤

  1. 引入相应的包,如:java.servletjava.servlet.http 包,两个包的区别是前者与协议无关,后者与HTTP协议相关。
  2. 创建一个扩展类,如本例中的 HelloServlet,并继承 HttpServlet 类。(一般的,HttpServlet 类封装了很多基于HTTP协议下的Servlet功能,基本够用,若自己想开发一个协议可继承 GenericServlet 类)
  3. override doGet()doPost() 方法,doGet() 响应get请求,doPost() 响应Post请求。或者可以override service()方法,对所有请求统一处理。欲详细了解 service()doGet()doPost()等方法,请看:五、关于 Servlet、HttpServlet、GenericServlet
代码示例:
package com.javaweb.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/* 用注入声明的方式表示这是一个 Servlet 类,不用在web.xml中配置 Servlet */
@WebServlet (
    urlPatterns = { "/HelloServlet" },
    name = " helloServlet "
)

// 继承HttpServlet类
public class HelloServlet extends HttpServlet {

    // 序列化,可以自动生成或者自行定义
    private static final long serialVersionUID = 1L;

    // 一、初始化阶段的 init() 方法
    public void init() throws ServletException {
    System.out.println("初始化 init 方法");
    }

    // 过程二执行的方法有一定的顺序与条件,详细请看: 五、关于 Servlet、HttpServlet、GenericServlet
    // 二、调用 public service 方法
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        System.out.println("调用 public service 方法");

        // 设定页面的MINE类型和字符集
        response.setContentType("text/html;charset=utf-8");
    
        // 输出响应
        PrintWriter out = response.getWriter();
        out.println("收到 service 请求");
    }

    // 二、调用 protected service 方法
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException {
        System.out.println("调用 protected service 方法");
    }

    // 二、调用 doGet() 方法
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    // 二、调用 doPost() 方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("调用 doPost() 方法"); 
    
        // 设定页面的MINE类型和字符集
        response.setContentType("text/html;charset=utf-8");
    
        // 输出响应
        PrintWriter out = response.getWriter();
        out.println("收到 HelloServlet doPost() 请求");
    }

    // 三、消亡阶段的 destory() 方法
    public void destory() {
        System.out.println("调用 destory() 方法");
    }
 } 

五、关于 Servlet、HttpServlet、GenericServlet

Servlet 来自于 javax.servlet.Servlet
HttpServlet 来自于 javax.servlet.http.HttpServlet
GenericServlet 来自于 javax.servlet.GenericServlet

1. Servlet

servlet 是一个接口,如果实现这个接口,那么就必须实现接口里面定义的所有方法。一般开发不会去自己实现该接口,它只提供了一种规范,供 开发者 自己来编写相关的实现


api中对 Servlet 接口的说明

2. GenericServlet

3. HttpServlet

HttpServlet 是一个抽象类,它继承了 GenericServlet 抽象类,而 GenericServlet 类实现了 Servlet 接口,所以HttpServlet 类也就默认实现了 Servlet 接口。默认实现规范而实用,开发web端的servlet程序,一般我们只需继承 HttpServlet 类就可以了

api中对 HttpServlet 抽象类的说明

① 2个重载的 service() 方法

② doGet(),doPost(),doOptions(),doTrace(),doDelete(),doHead(), doPut() 这7个方法

③ getLastModified(HttpServletRequest req) 方法

最后,分享我用PowerDesigner创建的面向对象模型的关系图来说明三者的关联:


面向对象模型图
上一篇 下一篇

猜你喜欢

热点阅读