JavaWeb学习笔记——第四天

Maven

概述

  • Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。它基于项目对象模型(POM,project object model)的概念,通过一小段描述信息来管理项目的构建。
  • Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利性组织。官网:http://maven.apache.org/

Maven的作用

  • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题。
  • 统一项目结构:提供标准、统一的项目结构:

Maven项目结构

  • 标准的项目构建流程:即清理、编译、测试、打包和发布。

Maven的模型

  • Maven由三部分组成:
    • 构建声明周期/阶段(Build lifecycle & phases):在各个构建声明周期/阶段通过Maven提供的各种插件完成项目的标准化构建并产生对应的文件,如编译插件、测试插件、打包插件……
    • 项目对象模型(POM):通过pom.xml中配置的信息来描述Maven工程。
    • 依赖管理模型(Dependency):管理各种jar包,并在添加了依赖坐标后自动在仓库中寻找并下载相应的jar包。
  • 仓库:用于存储资源,管理各种jar包。
    • 本地仓库:自己计算机上的一个目录。
    • 中央仓库:由Maven团队维护的全球唯一的。 仓库地址:https://repo1.maven.org/maven2/
    • 远程仓库(私服):一般由公司团队搭建的私有仓库。
    • 查找顺序:
      • 没有连接远程仓库:先在本地仓库查找,如果找到了,就直接进行关联;如果没找到的话,就会去中央仓库查找并下载,再进行关联。
      • 连接了远程仓库:先在本地仓库查找,如果找到了,就直接进行关联;如果没找到的话,就会去远程仓库查找并下载,还是没找到的话,远程仓库就会去中央仓库查找并下载,然后本地仓库再进行下载并关联。

Maven的安装

  1. 解压maven压缩包。
  2. 配置本地仓库:修改 conf/settings.xml 中的<localRepository>为一个指定目录。
<localRepository>Maven的本地仓库目录路径</localRepository>
  1. 配置阿里云私服:修改 conf/settings.xml 中的<mirrors>标签,为其添加如下子标签:
<mirror>  
    <id>alimaven</id>  
    <name>aliyun maven</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>          
</mirror>
  1. 配置环境变量:MAVEN_HOME为maven的解压目录,并将其bin目录加入PATH环境变量。

验证安装是否完成

在命令行中输入mvn -v,如果能输出maven的版本号,则说明安装配置完成。

IDEA集成Maven

配置Maven环境

配置Maven环境(当前工程)

  • 选择 IDEA中 File → Settings → Build,Execution,Deployment → Build Tools → Maven。
  • 设置 IDEA 使用本地安装的 Maven,并修改配置文件及本地仓库路径。

配置Maven环境(全局)

  • 退出工程 → All settings → Build,Execution,Deployment → Build Tools → Maven。
  • 设置 IDEA 使用本地安装的 Maven,并修改配置文件及本地仓库路径。

创建Maven项目

  1. 创建模块,选择Maven,点击Next。
  2. 填写模块名称,坐标信息,点击finish,创建完成。
  3. 编写 HelloWorld,并运行。

Maven坐标

  • Maven中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置。
  • 使用坐标可以定义项目或引入项目中需要的依赖。
Maven坐标的主要组成
  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写)。
  • artifactId:定义当前Maven项目名称(通常是模块名称)。
  • version:定义当前项目版本号。
坐标示例
<!--项目坐标-->
<groupId>com.zgg1h</groupId>
<artifactId>maven-project01</artifactId>
<version>1.0-SNAPSHOT</version>

<!--资源坐标-->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

IDEA 导入 Maven 项目

  • 方式一:打开IDEA,选择右侧Maven面板,点击 + 号,选中对应项目的pom.xml文件,双击即可。
  • 方式二:打开IDEA,选择 File → Build Tools → Project Structure → Modules,点击 + 号,选择Import Module选中对应项目的pom.xml文件,双击即可。

依赖管理

依赖配置

  • 依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。
  • 配置步骤:
    1. 在 pom.xml 中编写 <dependencies> 标签。
    2. 在 <dependencies> 标签中 使用 <dependency> 引入坐标。
    3. 定义坐标的 groupId,artifactId,version。
    4. 点击刷新按钮,引入最新加入的坐标。

注意

  • 如果引入的依赖在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖。
  • 如果不知道依赖的坐标信息,可以到https://mvnrepository.com/中搜索。

依赖传递

依赖具有传递性:在被引入的依赖中引入的依赖也会被引入。

依赖传递的分类

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系。
  • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源。

排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。

用法

在pom.xml文件的<dependency>标签下添加<exclusions>标签,并在<exclusions>标签中添加<exclusion>标签,其中包含要排除的资源:

<dependency>
    <groupId>com.zgg1h</groupId>
    <artifactId>maven-projectB</artifactId>
    <version>1.0-SNAPSHOT</version>
    <exclusions>
        <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </exclusion>
    </exclusions>
</dependency>

依赖范围

依赖的jar包,默认情况下,可以在任何地方使用。可以通过 <scope>…</ scope > 设置其作用范围。

scope值 主程序 测试程序 打包(运行) 范例
compile(默认) log4j
test × × junit
provided × servlet-api
runtime × jdbc驱动

作用范围

  • 主程序:main文件夹范围内有效。
  • 测试程序:test文件夹范围内有效。
  • 打包(运行):package指令范围内有效。

生命周期

  • Maven的生命周期是为了对所有的Maven项目构建过程进行抽象和统一而存在的。

  • Maven中有3套相互独立的生命周期

    • clean:负责清理工作。
    • default:负责核心工作,如:编译、测试、打包、安装、部署等。
    • site:负责生成报告、发布站点等。
  • 每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段,当运行后面的阶段时,前面的阶段都会运行。

生命周期

部分生命周期的职责

生命周期 职责
clean 移除上一次构建生成的文件
compile 编译项目源代码
test 使用合适的单元测试框架运行测试,如:junit等
package 将编译后的文件打包,如:jar、war等
install 安装项目到本地仓库

执行指定生命周期的方式

  • 方式一:在idea中,右侧的maven工具栏,选中对应的生命周期,双击执行。
  • 在命令行中,cd到模块目录下,通过命令:mvn 生命周期名执行。

Spring

  • 官网:spring.io
  • Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。
  • Spring Boot 可以帮助我们非常快速的构建应用程序、简化开发、提高效率。

SpringBootWeb入门

需求

使用 SpringBoot 开发一个web应用,浏览器发起请求 /hello后,给浏览器返回字符串 "Hello World ~"。

步骤

  1. 创建springboot工程,填写模块信息,并勾选web开发相关依赖。
  2. 创建请求处理类HelloController,添加请求处理方法 hello,并添加注解。
  3. 运行启动类,打开浏览器测试。

HTTP协议

HTTP-概述

HTTP全称Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

特点

  • 基于TCP协议:面向连接,更加安全。
  • 基于请求-响应模型的:一次请求对应一次响应。
  • HTTP协议是无状态的协议:对于事务处理没有记忆能力,每次请求-响应都是独立的。
    • 缺点:多次请求间不能共享数据。
    • 优点:速度快。

HTTP-请求协议

HTTP的请求数据由三部分组成:

  • 请求行:请求数据的第一行,包含三个部分:请求方式(GET、POST等)、资源路径和协议。
  • 请求头:第二行开始,格式为key:value。
  • 请求体:POST请求特有,存放请求参数,与请求头之间有一个空行隔开。

常见请求头

请求头 含义
Host 请求的主机名
User-Agent 浏览器版本
Accept 表示浏览器能接收的资源类型,*/*表示所有类型都能接收
Accept-Language 表示浏览器偏好的语言,服务器可以据此返回不同语言的网页
Accept-Encoding 表示浏览器可以支持的压缩类型
Content-Type 请求主体的数据类型。
Content-Length 请求主体的大小(单位:字节)

GET和POST的区别

  • GET请求方式的请求参数在请求行中,没有请求体,GET请求大小是有限制的。
  • POST请求方式的请求参数在请求体中,POST请求大小是没有限制的。

HTTP-响应协议

HTTP的响应数据由三部分组成:

  • 响应行:响应数据第一行,包含三个部分:协议、状态码和描述。
  • 响应头:第二行开始,格式为key:value。
  • 响应体:最后一部分,存放响应数据。

状态码大类

状态码 含义
1xx 响应中-临时状态码,表示请求已经接收,告诉客户端应该继续请求,如果客户端已经完成则忽略它
2xx 成功-表示请求已经被成功接收,处理已完成
3xx 重定向-重定向到其他地方;让客户端再发起一次请求以完成整个处理
4xx 客户端错误-处理发生错误,责任在客户端
5xx 服务器错误-处理发生错误,责任在服务端

常见状态码

状态码 英文描述 解释
200 OK 客户端请求成功,即处理成功,这是我们最想看到的状态码
302 Found 指示所请求的资源已移动到由Location响应头给定的 URL,浏览器会自动重新访问到这个页面
304 Not Modified 告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
403 Forbidden 服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源
404 Not Found 请求资源不存在,一般是URL输入有误,或者网站资源被删除了
405 Method Not Allowed 请求方式有误,比如应该用GET请求方式的资源,但用了POST
428 Precondition Required 服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头
429 Too Many Requests 指示用户在给定时间内发送了太多请求(“限速”),配合Retry-After(多长时间后可以请求)响应头一起使用
431 Request Header Fields Too Large 请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。
500 Internal Server Error 服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧
503 Service Unavailable 服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好

状态码大全:https://cloud.tencent.com/developer/chapter/13553

常见响应头

响应头 含义
Content-Type 表示该响应内容的类型
Content-Length 表示该响应内容的长度(字节数)
Content-Encoding 表示该响应压缩算法
Cache-Control 指示客户端应如何缓存
Set-Cookie 告诉浏览器为当前页面所在的域设置cookie

HTTP-协议解析

使用Java来解析HTTP协议费时费力,可以通过使用Web服务器来简化开发过程,提高开发效率。

Web服务器-Tomcat

  • Web服务器是一个软件程序,对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。
  • 主要功能是部署web项目,对外提供网上信息浏览服务。

Tomcat简介

  • Tomcat是Apache 软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Servlet和JSP等少量JavaEE规范。
  • JavaEE:Java Enterprise Edition,Java企业版。指Java企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JTS、JTA、JavaMail、JAF。
  • Tomcat 也被称为 Web容器、Servlet容器。Servlet程序需要依赖于 Tomcat才能运行 。
  • 官网:https://tomcat.apache.org/

Tomcat的基本使用

下载

官网下载,地址 https://tomcat.apache.org/download-90.cgi

安装

  • 绿色版,直接解压即可。
  • 安装完成的文件夹下各目录保存内容:
目录 保存内容
bin 可执行文件
conf 配置文件
lib Tomcat依赖的jar包
logs 日志文件
temp 临时文件
webapps 应用发布目录
work 工作目录

卸载

直接删除目录即可。

启动

双击bin\startup.bat即可。

关闭

  • 直接×掉运行窗口:强制关闭。
  • 双击bin\shutdown.bat:正常关闭。
  • Ctrl+C:正常关闭。

部署

将项目放置到 webapps 目录下,即部署完成。

常见问题

控制台中文乱码

将conf/logging.properties文件中的java.util.logging.ConsoleHandler.encoding = UTF-8改成java.util.logging.ConsoleHandler.encoding = GBK即可。

启动窗口一闪而过

检查JAVA_HOME环境变量是否正确配置。

端口号冲突
  • 方法一:找到对应程序,将其关闭掉。
  • 方法二:配置Tomcat端口号,在conf/server.xml文件中找到以下代码,并把port后的值改为想要的端口号。
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

注意:HTTP协议默认端口号为80,如果将Tomcat端口号改为80,则将来访问Tomcat时,不用输入端口号。

SpringBootWeb快速入门程序解析

  • springboot项目自动生成时包含了以下依赖,它们被称为起步依赖:
  • 基于Springboot开发的web应用程序,内嵌了Tomcat服务器,当启动类运行时,会自动启动内嵌的Tomcat服务器。
posted @   zgg1h  阅读(26)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示