← 返回首页
Servlet基础教程(七)
发表时间:2020-04-05 16:56:37
讲解Servlet的执行原理

1.Servlet的继承结构

Servlet的继承结构如下。 - Servlet接口:定义了Servlet应该具有的基本方法 - GenericServlet:抽象类,实现了Servlet接口。通用基本Servlet实现,对于不常用的方法在这个实现类中进行了基本的实现,将Service设计为了抽象方法,需要子类去实现 - HttpServlet:抽象类,继承了GenericServlet类。在通用Servlet的基础上基于HTTP协议进行了进一步的强化:复写了GenericServlet中的Service方法,Service方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要继承HttpServlet,然后覆写doGet或doPost方法,而不要去覆写service方法。

2.编写Servlet的基本步骤

  1. 编写Servlet类,继承于HttpServlet。
  2. 重写doGet()或者doPost()方法。
  3. 在web.xml中注册servlet或者使用@WebServlet注解定义。

3.servlet执行流程

  1. 客户端发送请求给服务器。
  2. 服务器开始接受,先判断该请求的servlet实例是否存在,如果不存在先装载一个servlet类并创建实例。如果存在则直接调用该servlet的service方法,之后进行判断是调用doGet方法还是doPost方法。
  3. 如果是get请求则执行doGet方法处理请求,如果是post则执行doPost方法处理请求。
  4. 最后判断服务是否关闭,如果关闭则调用destroy方法。

4.doGet与doPost

1)发送get请求 在使用表单提交数据到服务器的时候有两张方式可共选择,一个是post一个是get。可在

中的method属性中指定提交的方式。如:,如果不指定method属性,则会默认该属性为”get”方式。

以超链接方式提交的请求一般也是get请求。

2)发送post请求

在中的method属性中指定提交的方式。如:,则发送了post请求。

例如: 在web根目录下创建index.html测试页面。分别使用超链接和表单测试get和post请求。

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h1>doGet与doPost</h1>
<hr>
<div>
    <a href="hello">发送get请求</a>
</div>
<div>
    <form action="hello" method="post">
        <input type="submit" value="发送post请求"/>
    </form>
</div>
</body>
</html>

创建HelloServlet类,测试接收get和post请求。

package com.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(value="/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行了doGet...");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行了doPost...");
    }
}

当用户点击超链接,控制台输出:

执行了doGet...

当用户点击表单提交按钮,控制台输出:

执行了doPost...

5.get请求与post的区别

不同点一: 通过get方式提交的数据有大小的限制,通常在1024字节左右。也就是说如果提交的数据很大,用get方法就可需要小心;而post方式没有数据大小的限制,理论上传送多少数据都可以。

不同点二: 通过get传递数据,实际上是将传递的数据按照”key,value”的方式跟在URL的后面来达到传送的目的的;而post传递数据是通过http请求的附件进行的,在URL中并没有明文显示。

不同点三: 通过Get方式提交的数据安全性不高,而Post方式的更加安全。