2024/9/24
《正文开始》
(注,本文使用jdk17,maven3.8,IDEA2024专业版,window11系统)
一、maven
其安装参考B站视频,非黑马教程讲解
(一)概述
maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。
开源项目:Apache Projects List
1.作用
(1)依赖管理:方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题
(2)统一项目结构:提供标准、统一的项目结构
(3)项目构建:标准跨平台(Linux、Windows、MacOS)的自动化项目构建方式
2.仓库
用于存储资源,管理各种jar包
·本地仓库:自己计算机上的一个目录
·中央仓库:由Maven团队维护的全球唯一的。仓库地址:Central Repository:
·远程仓库(私服):一般由公司团队搭建的私有仓库
(二)idea集成Maven
1.配置Mavenhuanj
参考B站视频,非黑马教程讲解
2.创建Maven项目
参考B站视频,非黑马教程讲解
(1)坐标
·Maven中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置
·使用坐标来定义项目或引入项目中需要的依赖
(2)Maven坐标组成
·groupId:定义当前Maven'项目隶属组织名称(通常是域名反写,例如:com.itheima)
·artifactId:定义当前Maven项目名称(通常是模块名称,例如:order-service、goods-service)
·version:定义当前项目版本号
·<scope>:指定作用域范围
3.导入Maven项目
(1)方式一:
打开IDEA,选择右侧Maven面板,点击+号,选中对应项目的pom.xml文件,双击即可
(二)方式二:
(三)依赖管理
1.依赖配置
(一)依赖
指当前项目运行所需要的jar包,一个项目可以引入多个依赖
(二)配置
注:
·如果引入的依赖,在本地仓库不存在,将会连接远程仓库 / 中央仓库,然后下载依赖(耗时长)
·如果不知道依赖的坐标信息,可以到Maven Repository: Search/Browse/Explore (mvnrepository.com)
中搜索,如下:
2.依赖传递
依赖具有传递性
·直接依赖:在当前项目中通过依赖配置建立的依赖关系
·间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
·排除依赖:排除以来指主动断开依赖的资源,被排除的资源无需指定版本
实例如下:
3.依赖范围
依赖的jar包,在默认情况下,可以在任何地方使用。可以通过<scope>...</scope>设置其作用范围
作用范围:
·主程序范围有效(main文件夹范围内)
·测试程序范围有效(test文件夹范围内)
·是否参与打包运行(package指令范围内)
4.生命周期
Maven的生命周期就是为了对所有的Maven项目构建过程进行抽象和统一
(1)Maven中有3套相互独立的生命周期
·clean:清理工作
·default:核心工作,如:编译、测试、打包、安装、部署等
·site:生成报告、发布站点等
每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段
(2)生命周期阶段
·clean:移除上一次构建生成的文件
·compile:编译项目源代码
·test:使用合适的单元测试框架运行测试(junit)
·package:将编译后的文件打包,如:jar、war等
·install:安装项目到本地仓库
注:
在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行
二、Web入门
Spring
·官网:spring.io
·Spring发展到今天以及形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能
其中,Spring Boot可以帮助我们非常快速的构建应用程序、简化开发、提高效率
(一)SpringBootWeb快速入门
需求:使用SpringBoot开发一个Web应用,浏览器发起请求/hello后,给浏览器返回字符串"Hello World~"。
·创建步骤
(1)创建springboot工程,并勾选web开发相关依赖
由于Java面向对象的特性,每名Java开发人员都可以编写属于自己的Java Package,为了保障每个Java Package命名的唯一性,在最新的Java编程规范中,要求开发人员在自己定义的包名前加上唯一的前缀。由于互联网上的域名称是不会重复的,所以多数开发人员采用自己公司在互联网上的域名称作为自己程序包的唯一前缀。例如: com.sun.swt.……
Group:组织名,即域名倒写(默认org.example)
Server URL: 这里建议使用 https://start.aliyun.com/
Artifact:模块名
Location:创建的工程所放置位置
创建完成:
·使用阿里云,保留目录如下:
(2)定义HelloController类,添加方法hello,并添加注解
*@RequestMapping是请求映射注解,当客户端访问括号内指定的路径时,该请求会被映射到注解下面的方法进行处理。
若失败,使用@Getmapping
*若页面加载不出来,可能是/hello被占用,改个名字即可,如/helloText
package org.example.spring_try05.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/helloTest")
public String hello(){
System.out.println("Hello World~");
return "Hello World~";
}
}
·右下角显示端口号:8080
(3)运行测试:成功
(二)HTTP协议
1.概述
(1)概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器与服务器之间数据传输的规则。(即规定格式,包括请求数据的格式、以及响应数据的格式)
以下是查看请求与相应数据格式:
(2)特点:
1.基于TCP协议:面向连接,安全
(每次请求之前,进行三次握手,连接完之后,确定双方输发能力了,再来传输数据,不容易丢数据包)
2.基于请求-响应数据模型的:一次性请求对应一次响应
3.HTTP协议是无状态的协议:对于事物处理没有记忆能力。每次请求-响应都是独立的。(后一次请求是不会记录前一次请求数据的)
缺点:多次请求间不能共享数据(后面的课可有解决办法)
优点:速度快
2.请求协议
即请求数据的格式,三个部分,请求行、请求头、请求体
(1)请求行:请求数据第一行(win11展示如下)
应包含:请求方式、资源路径、协议
(2)请求头:
格式:key:value
详细说明移步以下文章:
HTTP请求和请求头的详解_请求头和请求参数的区别-CSDN博客
其中:
User-Agent:涉及版本兼容问题
Content-Type:请求主体的数据类型
Content-Length:请求主体的大小(单位:字节)
(3)请求体:POST请求
存放请求参数
*注:
·请求方式-GET:请求方式在请求行中,显示在url中,没有请求体,且请求大小是有限制的
·请求方式-POST:请求参数在请求体中(body),且请求大小是没有限制的
因此,get的安全性更差。
3.响应协议
即响应数据格式,包含,响应行、响应头、响应体
1.响应行:响应数据第一行
协议、状态码、描述
响应码移步以下文章:
HTTP请求数据格式及响应数据格式_响应头格式-CSDN博客
2.响应头
格式:key:value
3.响应体
存放响应数据
4.协议解析
自动解析、请求响应、在服务器如何解析响应,并给浏览器响应数据
涉及:线程+IO+网络编程
*介绍TCP网络编程
通过serversocket写出服务器端程序,浏览器发送HTTP协议请求,通过serversovket接受其请求,获取请求数据,读取的数据为字符串,字符串格式是固定的,按字符串的组成规则来解析他;同理,也可以通过serversocket获得输出流,按照HTTP响应数据的格式给浏览器响应一个固定格式的字符串------这样就完成了一次网络请求。
serversocket介绍如下:
在Java Web开发中,ServerSocket
是 Java 标准库中的一个类,专门用于网络编程,尤其是在实现基于TCP的服务端程序时。ServerSocket
的主要作用是用于侦听来自客户端的连接请求,并为每个成功的连接创建一个与客户端通信的Socket。
简单来说,ServerSocket
就是服务器端的 "监听器"。它在某个特定的端口上等待客户端发起的连接请求,当有请求到来时,它会接受请求并与客户端建立连接。
主要特性和用途:
- 侦听端口:
ServerSocket
监听指定的端口。当有客户端通过该端口发起连接时,它就会接受连接。 - 阻塞操作:
ServerSocket
的accept()
方法是阻塞的,意味着它会一直等待,直到有客户端连接到达。如果没有连接到达,程序就会一直停留在该方法调用处。 - 多线程处理:在通常的Web服务器实现中,服务器会为每个客户端连接创建一个独立的线程来处理。这是因为
accept()
是阻塞的,所以通常在多线程模式下,可以为每个客户端提供独立的处理。
工作流程
- 创建ServerSocket:服务器端程序首先需要创建一个
ServerSocket
对象,绑定到一个端口。 - 监听连接:通过调用
accept()
方法,ServerSocket
会一直等待客户端的连接请求。 - 接受连接:一旦有客户端请求连接,
accept()
方法会返回一个Socket
对象,这个对象可以用于与客户端进行数据通信。 - 处理连接:使用返回的
Socket
对象进行输入输出流操作,与客户端交换数据。 - 关闭连接:当通信完成后,可以关闭
Socket
和ServerSocket
,释放相关资源。
示例代码
java
import java.io.*;
import java.net.*;
public class SimpleServer {
public static void main(String[] args) {
try {
// 创建ServerSocket,监听端口8080
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("Server is listening on port 8080");
// 接受客户端连接
Socket socket = serverSocket.accept();
System.out.println("Client connected");
// 创建输入流来接收客户端发送的数据
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 创建输出流来发送数据到客户端
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
String clientMessage = in.readLine();
System.out.println("Received from client: " + clientMessage);
// 向客户端发送响应
out.println("Hello from server!");
// 关闭连接
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
解释:
- ServerSocket(8080):在服务器端口8080上启动一个监听器,等待客户端连接。
- accept():这个方法会阻塞,直到有客户端连接请求到达,然后返回一个Socket对象用于与客户端通信。
- Socket:一旦建立连接,服务器和客户端可以通过
Socket
对象相互发送和接收数据。
应用场景:
- Web服务器:在Java Web开发中,虽然
ServerSocket
本身不是直接用于HTTP协议的(Java EE中的Servlet容器通常隐藏了这种低层实现),但在一些简单的服务器开发中,可以用ServerSocket
实现简单的Web服务。 - 聊天程序:
ServerSocket
常用于实现即时通讯应用或聊天室服务器,服务器负责接受客户端的连接,并向所有连接的客户端广播消息。
总结来说,ServerSocket
是Java网络编程中服务器端实现的核心类,负责处理客户端连接并支持双向的通信。
*网络编程介绍结束
以上解析HTTP协议的代码由网站已经编写好,封装到软件程序里,即web服务器中,查看即可:
因此,程序员只需要关注业务逻辑实现即可
(三)Web服务器-Tomcat
1.Web服务器
web服务器是一个软件程序,对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便携。
主要功能是部署web项目,“提供网上浏览器服务”
注:同一局域网才可以相互访问,远程访问需要内网(或公网ip)穿透
2.Tomcat
(1)简介
·一个轻量级的web服务器,支持servlet、jsp等少量javaEE规范
·也被称为web容器、servlet容器
(2)基本使用
外置部署下载(我暂时没有看,但是日后运用也是需要下载的)
指路:P65
(3)入门程序解析
内嵌tomcat
1.起步依赖:
·spring-boot-starter-web:包含了web应用开发所需要的常见依赖
·spring-boot-starter-test:包含了单元测试所需要的常见依赖
2.内嵌Tomcat服务器
·基于SpringBoot开发的Web应用程序,内置了tomcat服务器,当启动类运行时,会自动启动内嵌的tomcat服务器