Bootstrap

使用Tomcat搭建一个Servlet项目

Tomcat

Tomcat是一个HTTP服务器,在TCP服务器的基础上加了一些额外的功能,能够解析请求中的HTTP报文,把请求转换成结构化数据(对象),也能很方便的构造HTTP响应。HTTP服务器提供了一组API,方便程序员直接调用来操作HTTP协议,从而简化程序员的开发工程。servlet程序是一个war后缀的文件,tomcat会自动把war解压缩得到一个目录,每个war其实就对应了一个webapp,一个Tomcat可以部署多个servlet程序,所以可以把Tomcat称为“servlet的容器”。

maven

maven是java世界中非常知名的“工程管理工具”/“构建工具”,核心功能:管理依赖,构建/编译,打包。maven存在的意义就是能够直接把这些操作串起来,一气呵成。

  • 依赖:进行A操作前,先执行B操作
  • 构建/编译:调用jdk
  • 打包:把java代码构造成jar或者war

使用

创建maven项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

管理依赖

在这里插入图片描述
在这里插入图片描述

实践

完成一个servlet的hello world
1.创建一个maven项目
2.引入依赖
需要在代码中引入servlet api,这个api不是jdk内住的,而是第三方tomcat提供的,借助Maven直接引入。
在这里插入图片描述

3.创建目录结构
在这里插入图片描述
在这里插入图片描述

<!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 Application</display-name>
</web-app>

4.编写servlet代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.打包和部署
使用smart tomcat插件

6.验证程序
在这里插入图片描述

可以这样认为:
一个Tomcat上可以同时部署多个网站,一个网站上又有多个页面,一个请求中的第一级路径用于告诉tomcat要访问的网站是哪个,第二级路径告诉tomcat要访问的页面是这个网站的那个页面。

使用总结

在这里插入图片描述

GET,POST请求应用场景

啥时候浏览器发的是GET请求?

  1. 直接在地址栏里输入URL
  2. 通过a标签跳转
  3. 通过img/link/script
  4. 通过form表单,method指定为GET
  5. 通过ajax,type指定为GET

啥时候浏览器发送的是POST请求?

  1. 通过form表单,method指定为POST
  2. 通过ajax,type类型为POST

Servlet运行原理

在这里插入图片描述

Tomcat伪代码

Tomcat初始化

1)让Tomcat先从指定的目录中找到所有要加载的Servlet类
前面部署的时候是把Servlet代码编译成了.class,然后打包成了war包。然后拷贝到了webapps里面。Tomcat就会从webapps里来找到哪些.class对应的Servlet类,并进行加载。
2)根据刚才类加载的结果,给这些类创建Servlet实例
在这里插入图片描述

3)实例创建好之后,就可以调用当前Servlet实例的init方法了
在这里插入图片描述

4)创建TCP socket,监听8080端口,等待有客户端来连接
在这里插入图片描述

5)如果循环退出了,Tomcat也要结束了就会一次循环调用每个Servlet的destroy方法
在这里插入图片描述

Tomcat处理请求

在这里插入图片描述

1)req司通过读取socket中的数据,然后爱按照HTTP协议的请求格式来解析的,构造成了一个HttpServletRequest对象,resq这里则是相当于new了一个空对象
2)判定当前要的顶球是否是静态文件,如果是静态文件就要读取文件内容,把文件内容够遭到resq对象的body中,并且返回这个resq对象
3)根据请求的URL来获取到使用哪个类来处理
URL里有两个路径。
第一级路径:Context Path,确定一个webapp
第二级路径:Servlet path,确定一个Servlet类
如果没有找到匹配的Servlet类就会返回404
4)根据刚才找到的Servlet对象,来调用service方法,在service方法内部又会进一步调用doGet/doPost,下面是service方法内部
在这里插入图片描述

Servlet的关键API

HTTPServlet

我们写的代码就是通过继承这个类,重写其中的方法来被Tomcat执行
在这里插入图片描述
在这里插入图片描述

HttpServletRequest和HttpServletResponse

在这里插入图片描述
在这里插入图片描述

例子1:

展示请求的响应

@WebServlet
;