目录
1. Tomcat
1.1 简介

1.2 基本使用


bin:目录下有两类文件,一种是以.bat结尾的,是Windows系统的可执行文件,一种是以.sh结尾的,是Linux系统的可执行文件。
webapps:就是以后项目部署的目录
卸载:卸载比较简单,可以直接删除目录即可
2.Servlet
2.1 快速入门




package org.example;
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;
/*
* 这是一个Servlet类,需要实现接口Servlet(可以选中继承HttpServlet)
*/
@WebServlet(urlPatterns = "/hello")//定义请求路径
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取请求参数值
String name = req.getParameter("name");
//2.响应结果到浏览器
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("<h1>Hello " + name + "~<h1>");
}
}

2.2 执行流程
1).定位服务器
通过url地址中的ip/主机 与 端口号 http://localhost:8080,首先会定位到我们要访问的Web服务器。

而在一个web服务器中,是可以部署多个应用程序的。那我们具体要访问到那个项目呢 ? 接下来,我们再来看如何定位到要访问的应用程序的。
2). 定位项目
通过端口号之后的 servlet-demo,就可以定位到Web服务器中部署的应用。

而我们知道在一个应用中呢,是可以有多个Servlet程序的,那如何定位到要访问的是哪一个Servlet呢 ?
3). 定位Servlet
那么通过请求路径中的最后一个部分 /hello 就可以知道我们要访问的Servlet程序是 HelloServlet,因为 HelloServlet 的请求路径是 /hello。

4).执行Servlet

3.HTTP协议
3.1 HTTP-概述

如果想知道http协议的数据传输格式有哪些,可以打开浏览器,点击F12打开开发者工具,点击Network来查看

浏览器向服务器进行请求时:
-
服务器按照固定的格式进行解析


服务器向浏览器进行响应时:
-
浏览器按照固定的格式进行解析
-
请求行(以上图中红色部分):包含请求方式、资源路径、协议/版本
-
请求方式:POST
-
资源路径:/brand
-
协议/版本:HTTP/1.1
-
-
请求头(以上图中黄色部分)
-
请求体(以上图中绿色部分) :存储请求参数
-
请求体和请求头之间是有一个空行隔开(作用:用于标记请求头结束)
-
3.2 HTTP-请求协议
浏览器和服务器是按照HTTP协议进行数据通信的。
HTTP协议又分为:请求协议和响应协议
-
请求协议:浏览器将数据以请求格式发送到服务器
-
包括:请求行、请求头 、请求体
-
-
响应协议:服务器将数据以响应格式返回给浏览器
-
包括:响应行 、响应头 、响应体
-
3.2.1 请求数据格式
在HTTP1.1版本中,浏览器访问服务器的几种方式:
| 请求方式 | 请求说明 |
|---|---|
| GET | 获取资源。 向特定的资源发出请求。例:itheima_百度搜索 |
| POST | 传输实体主体。 向指定资源提交数据进行处理请求(例:上传文件),数据被包含在请求体中。 |
| OPTIONS | 返回服务器针对特定资源所支持的HTTP请求方式。 因为并不是所有的服务器都支持规定的方法,为了安全有些服务器可能会禁止掉一些方法,例如:DELETE、PUT等。那么OPTIONS就是用来询问服务器支持的方法。 |
| HEAD | 获得报文首部。 HEAD方法类似GET方法,但是不同的是HEAD方法不要求返回数据。通常用于确认URI的有效性及资源更新时间等。 |
| PUT | 传输文件。 PUT方法用来传输文件。类似FTP协议,文件内容包含在请求报文的实体中,然后请求保存到URL指定的服务器位置。 |
| DELETE | 删除文件。 请求服务器删除Request-URI所标识的资源 |
| TRACE | 追踪路径。 回显服务器收到的请求,主要用于测试或诊断 |
| CONNECT | 要求用隧道协议连接代理。 HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
GET请求和POST请求的区别:
| 区别方式 | GET请求 | POST请求 |
|---|---|---|
| 请求参数 | 请求参数在请求行中。 例:/brand/findAll?name=OPPO&status=1 | 请求参数在请求体中 |
| 请求参数长度 | 请求参数长度有限制(浏览器不同限制也不同) | 请求参数长度没有限制 |
| 安全性 | 安全性低。原因:请求参数暴露在浏览器地址栏中。 | 安全性相对高 |
3.2.2 请求信息获取

3.3 HTTP-响应协议
3.3.1 响应数据格式

响应行(以上图中红色部分):响应数据的第一行。响应行由协议及版本、响应状态码、状态码描述组成
-
协议/版本:HTTP/1.1
-
响应状态码:200
-
状态码描述:OK
常见的HTTP响应头有:
Content-Type:表示该响应内容的类型,例如text/html,image/jpeg ;
Content-Length:表示该响应内容的长度(字节数);
Content-Encoding:表示该响应压缩算法,例如gzip ;
Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒 ;
Set-Cookie: 告诉浏览器为当前页面所在的域设置cookie ;
响应体(以上图中绿色部分): 响应数据的最后一部分。存储响应的数据

关于响应状态码,我们先主要认识三个状态码,其余的等后期用到了再去掌握:
-
200 ok客户端请求成功 -
404 Not Found请求资源不存在 -
500 Internal Server Error服务端发生不可预期的错误
3.3.2 响应数据设置
Web服务器对HTTP协议的响应数据进行了封装(HttpServletResponse),并在调用Servlet方法的时候传递给了Servlet。这样,就使得程序员不必直接对协议进行操作,让Web开发更加便捷。

@WebServlet(urlPatterns = "/resp")
public class ResponseServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 设置响应状态码,不推荐设置
//resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
//2. 设置响应头,设置响应编码和响应数据类型,text/html必须写在前面
resp.setHeader("Content-Type", "text/html;charset=UTF-8");
//3. 设置响应体 - 获取字符输出流
String name = req.getParameter("name");
resp.getWriter().write("<h1>Hello " + name + "</h1>");
}
}
响应状态码 和 响应头如果没有特殊要求的话,通常不手动设定。服务器会根据请求处理的逻辑,自动设置响应状态码和响应头。
4.SpringBootWeb入门
刚才我们讲解了基于原始的Servlet程序开发Web应用,并基于此讲解了Http协议。 那接下来呢,我们就要来讲解现在企业开发的主流技术 SpringBoot,并基于SpringBoot进行Web程序的开发 。
4.1 概述
在没有正式学习SpringBoot之前,我们要先来了解下什么是Spring。
我们可以打开Spring的官网(Spring | Home),去看一下Spring的简介:Spring makes Java simple。

Spring的官方提供很多开源的项目,我们可以点击上面的projects,看到spring家族旗下的项目,按照流行程度排序为:

Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。而我们在项目开发时,一般会偏向于选择这一套spring家族的技术,来解决对应领域的问题,那我们称这一套技术为spring全家桶。

而Spring家族旗下这么多的技术,最基础、最核心的是 SpringFramework。其他的spring家族的技术,都是基于SpringFramework的,SpringFramework中提供很多实用功能,如:依赖注入、事务管理、web开发支持、数据访问、消息服务等等。

而如果我们在项目中,直接基于SpringFramework进行开发,存在两个问题:配置繁琐、入门难度大。

所以基于此呢,spring官方推荐我们从另外一个项目开始学习,那就是目前最火爆的SpringBoot。
通过springboot就可以快速的帮我们构建应用程序,所以springboot呢,最大的特点有两个 :
-
简化配置
-
快速开发
Spring Boot 可以帮助我们非常快速的构建应用程序、简化开发、提高效率 。
4.2 入门程序
4.2.1 需求
需求:基于SpringBoot的方式开发一个web应用,浏览器发起请求/hello后,给浏览器返回字符串 "Hello World ~"。

4.2.2 开发步骤
第1步:创建SpringBoot工程,并勾选Web开发相关依赖
第2步:定义HelloController类,添加方法hello,并添加注解
第3步:测试运行

1). 创建SpringBoot工程(需要联网)
基于Spring官方骨架,创建SpringBoot工程。

基本信息描述完毕之后,勾选web开发相关依赖。

点击Finish之后,就会联网创建这个SpringBoot工程,创建好之后,结构如下:

2). 定义请求处理类
在com.itheima这个包下新建一个类:HelloController

package com.itheima;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //标识当前类是一个请求处理类
public class HelloController {
@RequestMapping("/hello") //用来设置请求路径
public String hello() {
System.out.println("hello world ~");
return "Hello World ~";
}
}
3). 运行测试
运行SpringBoot自动生成的引导类
package com.itheima;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 启动类
*/
@SpringBootApplication
public class SpringbootWebQuickstart01Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebQuickstart01Application.class, args);
}
}

SpringBootWeb入门,应用创建方式二(基于Maven创建)
1.创建一个Maven项目
2.在pom.xml中,继承springboot父工程,添加web依赖
3.在src/main/java下创建启动类。类上加@SpringBootApplication注解,定义main方法,里面运行SpringApplication.run(XX.calss,args)方法
4.定义请求处理类,定义方法,需要在类上加注解@RestController,方法加注解@RequestMapping("/hello")
5.运行启动类,测试。
package com.itheima;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello world 22222";
}
}
package com.itheima;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* SpringBootWeb入门,应用创建方式二(基于Maven创建)
* 1.创建一个Maven项目
* 2.在pom.xml中,继承springboot父工程,添加web依赖
* 3.在src/main/java下创建启动类。类上加@SpringBootApplication注解,
* 定义main方法,里面运行SpringApplication.run(XX.calss,args)方法
* 4.定义请求处理类,定义方法,需要在类上加注解@RestController,方法加注解@RequestMapping("/hello")
* 5.运行启动类,测试
*/
/**
* 启动类
*/
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
System.out.println("Hello world!");
}
}
修改端口

4.3 入门程序解析

main方法如何启动Tomcat ?

因为我们在创建springboot项目的时候,选择了web开发的起步依赖 spring-boot-starter-web。而spring-boot-starter-web依赖,又依赖了spring-boot-starter-tomcat,由于maven的依赖传递特性,那么在我们创建的springboot项目中也就已经有了tomcat的依赖,这个其实就是springboot中内嵌的tomcat。
而我们运行引导类中的main方法,其实启动的就是springboot中内嵌的Tomcat服务器。 而我们所开发的项目,也会自动的部署在该tomcat服务器中,并占用8080端口号 。

Tomcat是一个servlet容器,为什么可以运行我们编写的HelloController?
首先,大家需要知道,Tomcat是一个Servlet容器,而我们编写的Controller程序是不能被Tomcat服务器识别的。

那我们在浏览器地址栏访问 http://localhost:8080/hello?name=Tom 时是如何访问到HelloController程序的呢? 这是因为啊,虽然我们没有编写Servlet程序,但是呢,在Springboot框架的底层源码中,给我们提供了一个核心的Servlet程序,叫 DispatcherServlet。

而DispatcherServlet是一个实现类,底层实现了Servlet程序,继承了HttpServlet。

前端发起的所有请求到达服务器之后,都会被DispatcherServlet接收并处理,而DispatcherServlet并不会直接对请求进行处理,而是将请求转发给后面我们自己编写的Controller程序,最终有Controller程序来进行请求的处理。
所以,我们基于Springboot进行Web程序的开发,是不需要直接编写原始的Servlet程序的,我们只需要编写Controller程序,来接收请求,响应数据即可。


2069

被折叠的 条评论
为什么被折叠?



