初识-Servlet (第一个 Servlet 程序详解)

Servlet 是什么?

Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序员的 API, 帮助程序员简单高效的开发一个 web app.

静态页面就只是单纯的 html
动态页面则是 html + 数据


第一个 Servlet 程序

我们写一个 hello world
预期写一个 Servlet 程序, 部署到 Tomcat 上
通过浏览器访问得到 hello world

下面我们就开始史上最难 hello world

这个程序分为7个步骤

  1. 创建项目
  2. 引入依赖
  3. 创建目录结构
  4. 编写代码
  5. 打包程序
  6. 部署程序
  7. 验证

1. 创建项目

创建一个 maven 项目
>maven 是个"工程管理"工具
1. 规范目录结构
2. 管理依赖(使用啥第三方库,都给处理好)
3. 构建
4. 打包
5. 测试

我们现在主要使用 管理依赖和打包功能
首先打开 IDEA 创建项目
初识-Servlet (第一个 Servlet 程序详解)_第1张图片
创建 maven 项目
初识-Servlet (第一个 Servlet 程序详解)_第2张图片

初识-Servlet (第一个 Servlet 程序详解)_第3张图片

2. 引入依赖

servlet 对应的 jar包

meven 仓库

初识-Servlet (第一个 Servlet 程序详解)_第4张图片
初识-Servlet (第一个 Servlet 程序详解)_第5张图片
这里使用 3.1.0 版本, 和 tomcat 8 是匹配的.

初识-Servlet (第一个 Servlet 程序详解)_第6张图片
把 Meven 标签页下的代码 复制粘贴到 pom.xml 中

在顶级便签下, 创建一个 dependencies 便签, 把代码粘贴到 dependencies 便签下.
如果有多个依赖, 都往便签里依次粘贴即可

初识-Servlet (第一个 Servlet 程序详解)_第7张图片

我们首次粘贴的话, 可见上面的代码有红的, 红色说明还没下载完.
一般只要你粘贴进来, idea 的 Meven 就会自动触发依赖的下载, 下载完毕就不红了(下载只需一次)
如果粘贴进来, 半天没动, 我们可以手动刷新一下.

初识-Servlet (第一个 Servlet 程序详解)_第8张图片

到红色消失, 这个依赖就引入完成了.

3. 创建目录

虽然 maven 已经帮我们自动创建了一些目录, 但是还不够, 此处是需要使用 maven 开发一个 web 程序, 还需要别的目录

  1. 在 main 目录下(和java, resources 并列) 创建一个 webapp 目录
    初识-Servlet (第一个 Servlet 程序详解)_第9张图片
    初识-Servlet (第一个 Servlet 程序详解)_第10张图片
  2. 在 webapp 下创建 WEB-INF 目录

初识-Servlet (第一个 Servlet 程序详解)_第11张图片

  1. 再在 WEB-INF 目录下创建一个 web.xml 文件
    初识-Servlet (第一个 Servlet 程序详解)_第12张图片
    一定注意这里的目录名字和结构, 都不能错

  2. 给 xml 写点东西

DOCTYPE web-app PUBLIC
      "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
      "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
      <display-name>Archetype Created Web Applicationdisplay-name>
web-app>

我们写的这些代码没有main方法, 这个程序就相当于是车厢, tomcat 是车头, 我们把写好的 servlet 程序扔到 webapps 目录下, 就相当于把车厢挂在车头上了.
tomcat 如何识别呢?
webapps 目录下,判断哪些是要拉着跑的车厢, 哪些是不需要拉着跑的目录,就是靠目录下的 WEB_INF / web.xml

4. 编写代码

首先在 java 目录下, 创建一个类.
在这里插入图片描述

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       // 这个代码一定要删掉, 父类的这个方法只是返回一个错误页面.
       // super.doGet(req, resp);
    }
}

继承的这个类是 Servlet api 里提供的现成的类, 写 Servlet 代码一般都是继承这个 HttpServlet.

初识-Servlet (第一个 Servlet 程序详解)_第13张图片

我们写的这个 doGet 方法, 不需要我们手动调用, 而是要交给 Tomcat 来调用, Tomcat 收到 get 方法, 就会触发doGet 方法.
Tomcat 会构造好两个参数, req 和 resp , req 是 TCP Socket 中读出来的字符串, 按照 HTTP 协议解析得到的对象, 这个对象里的属性就是和 HTTP 请求报文格式相对应的, 这个req 是个空的对象.
程序员就需要在 doGet 根据 req 结合自己的业务逻辑构造出一个 resp 对象来.

resp就相当于一个"输出型参数"

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;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 这个代码一定要删掉, 父类的这个方法只是返回一个错误页面.
        // super.doGet(req, resp);
        //这个打印是在 tomcat 的控制台打印
        System.out.println("hello would");
        // 要想把 Hello world 返回到客户端, 就需要使用以下代码
        // getWriter 会得到一个 writer 对象
        resp.getWriter().write("hello world");
    }
}

此时的 write 操作其实是往 resp 的 body 部分进行写入, 等 resp 对象整个构造好了, Tomcat 会统一转成 HTTP 响应的格式, 再写 Socket

@WebServlet(“/hello”) 这个注解的作用是把当前类, 和一个 HTTP 请求的路径关联起来.

doGet 是 Tomcat 收到 GET 请求的时候就会调用, 具体要不要调用 doGet 还得看当前 GET 请求的路径是啥, 不同的路径可以触发不同的代码(关联到不同的类上)

一个Servlet 程序中, 可以有很多 Servlet 类, 每个 Servlet 类都可以关联到不同的路径(对应到不同的资源)
因此此处的多个 Servlet 类就可以实现不同的功能.

5.打包程序

把程序编译好(得到一些 .class 文件), 再把这些.class 打成压缩包(war 包),

jar 包 只是一个普通的 java 程序
war 包是 Tomcat 专属的用来描述 webapp 的程序

一个 war 包就是一个webapp 程序
初识-Servlet (第一个 Servlet 程序详解)_第14张图片
借助 meven 一点击即可

初识-Servlet (第一个 Servlet 程序详解)_第15张图片

默认情况下, meven 打的是 jar 包, 我们需要的是 war 包, 需要微调一下 pom.xml.

初识-Servlet (第一个 Servlet 程序详解)_第16张图片

初识-Servlet (第一个 Servlet 程序详解)_第17张图片

这个便签描述了 打的 war 包的名字, 然后在进行打包就能得到我们要的 war 包

初识-Servlet (第一个 Servlet 程序详解)_第18张图片

6. 部署程序

把 war 包拷贝到 Tomcat 的 webapps 目录下.

初识-Servlet (第一个 Servlet 程序详解)_第19张图片

7. 验证程序

启动服务器
在这里插入图片描述

此时通过浏览器访问 http://127.0.0.1:8080/hello_servlet/hello

在这里插入图片描述
初识-Servlet (第一个 Servlet 程序详解)_第20张图片

注意: URL 中的 PATH 分成两个部分, 其中 hello_servlet 为 Context Path, hello 为 Servlet Path

初识-Servlet (第一个 Servlet 程序详解)_第21张图片

你可能感兴趣的:(JavaEE,servlet)