JavaWeb-Web基础知识

目录

1. Tomcat

1.1 简介

1.2 基本使用

2.Servlet

2.1 快速入门

2.2 执行流程

3.HTTP协议

3.1 HTTP-概述

3.2 HTTP-请求协议

3.2.1 请求数据格式

3.2.2 请求信息获取

3.3 HTTP-响应协议

3.3.1 响应数据格式

 3.3.2 响应数据设置

4.SpringBootWeb入门

4.1 概述

4.2 入门程序

4.2.1 需求

4.2.2 开发步骤

4.3 入门程序解析


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程序,来接收请求,响应数据即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值