黑马JavaWeb-day04

文章目录

maven

maven 简介

maven: M a v e n Maven Maven a p a c h e apache apache旗下的一个开源项目,是一款用于管理和构建 j a v a java java项目的工具,它是基于项目对象模型(POM|project object model)的概念,通过一小段描述信息来管理项目的构建。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

maven的作用
在这里插入图片描述

  • 管理jar包:在引入maven之前,都是先下载 j a r jar jar包,然后在项目下面新建一个 l i b lib lib文件,然后将 j a r jar jar包放到 l i b lib lib文件中,有了maven后只需要在maven的配置文件中写代码即可

    在这里插入图片描述

  • 提供了一套标准化的项目构建流程在这里插入图片描述

  • 统一的项目结构:不同的开发工具创建出来的java项目具有不同的结构,但基于maven创建出来的项目具有相同的项目结构在这里插入图片描述


在这里插入图片描述

  • maven中的仓库是用来存储和管理jar包的
  • maven中一共有3类仓库,查找jar包的顺序是本地仓库、远程仓库、中央仓库

maven 安装

s t e p 1 step1 step1

在这里插入图片描述

同时将下载好的zip文件解压到无空格、中文的路径下

s t e p 2 step2 step2

配置本地仓库:修改 c o n f / s e t t i n g s . x m l conf/settings.xml conf/settings.xml中的 < l o c a l R e p o s i t o r y > <localRepository> <localRepository>为一个指定目录

在这里插入图片描述

s t e p 3 step3 step3

配置阿里云私服:修改 c o n f / s e t t i n g s . x m l conf/settings.xml conf/settings.xml中的 < m i r r o r s > <mirrors> <mirrors>标签,为其添加如下子标签

在这里插入图片描述

s t e p 4 step4 step4

配置环境变量: M A V E N _ H O M E MAVEN\_HOME MAVEN_HOME m a v e n maven maven的解压目录,并将其 b i n bin bin目录加入到 P A T H PATH PATH环境变量

在这里插入图片描述

在这里插入图片描述

在命令行输入下面命令检验环境变量是否配置成功

mvn -v

成功如下图:

在这里插入图片描述

IDEA集成maven

创建maven项目

idea中配置maven全局环境

在这里插入图片描述

然后正常创建即可

Maven 坐标

  • maven中的坐标是资源(jar)的唯一标识,通过该坐标可以唯一定位资源的位置
  • 使用坐标来定义项目或引人项目中需要的依赖

maven坐标的主要组成

  • groupId:定义当前的Maven项目隶属组织名称(通常是域名反写)
  • artifactId:定义当前Maven项目名称(通常是模块名)
  • version:定义当前项目版本号
    • SNAPSHOT:功能不稳定、尚处于开发中的版本,即快照版本
    • RELEASE:功能趋于稳定、当前更新停止,可用于发行的版本

依赖管理


依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖

配置依赖:

  • pom.xml中编写<dependencies>
  • <dependencies>标签中使用<dependency>引入坐标
  • 定义坐标的groupIdartifactIdversion
  • 点击刷新按钮、引入最新加入的坐标

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

只下载了 s p r i n g − c o n t e x t spring-context springcontext却多出来这么多依赖,原因就是maven的依赖传递,a依赖b,b依赖c,所有用a就需要b和c

在这里插入图片描述


maven的生命周期:对maven项目的构建过程进行了抽象和统一。

maven中有3套相互独立的声明周期:

  • clean:清理工作
  • default:核心工作,如:编译、测试、打包、安装、部署
  • site:生成报告、发布站点

在这里插入图片描述

我们只关注下面这5个阶段

在这里插入图片描述

单元测试

测试:是一种用来促进鉴定软件的正确性、完整性、安全性、质量可靠性的过程

测试阶段划分:单元测试、集成测试、系统测试、验收测试。

在这里插入图片描述

测试方法:白盒测试、黑盒测试及灰盒测试

在这里插入图片描述


单元测试:针对最小的功能单元(方法),编写测试代码对其正确性进行测试。

JUnit:最流行的Java测试框架之一,提供了一些功能,方便程序进行单元测试(第三方公司提供)

使用main方法测试的缺点:

  1. 测试代码和源代码未分开,难维护
  2. 一个方法测试失败,影响后面方法
  3. 无法自动化测试,得到测试报告

使用JUnit单元测试优点:

  1. 测试代码和源代码分开,便于维护
  2. 可根据需要进行自动化测试
  3. 可自动分析测试结果,产出测试报告

使用 J U n i t JUnit JUnit,对业务方法进行测试

  1. pom.xml中引入 J U n i t JUnit JUnit的依赖
  2. t e s t / j a v a test/java test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明@Test注解
  3. 运行单元测试(测试通过:绿色,测试失败:红色)

JUnit单元测试类命名规范为:xxxxTest.Junit单元测试方法,必须声明为 p u b l i c    v o i d public \;void publicvoid

在这里插入图片描述


断言、常见注解

单元测试运行不报错(绿色),并不是代表代码没问题.

断言junit提供了一些辅助方法,用来帮我们确定被测试的方法是否按照预期的效果正常工作,这种方法就被称为断言。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


注解

在这里插入图片描述

在这里插入图片描述


单元测试-企业开发规范

原则:编写测试方法时,要尽可能的覆盖业务方法中所有可能的情况(尤其是边界值)

在这里插入图片描述


在maven项目中,test目录存放单元测试的代码,也可以在main目录中编写单元测试但是并不规范

在这里插入图片描述

我们可以通过maven的依赖范围来进行一个强制的规范化,让测试类不能写在main中

依赖范围:

  • 依赖的jar包,默认情况下,可以在任何地方使用。可以通过 < s c o p e > . . . < / s c o p e > <scope>...</scope> <scope>...</scope>设置它的作用范围
  • 作用范围
    • 主程序范围有效。(main文件夹范围内)
    • 测试程序范围有效。(test文件夹范围内)
    • 是否参与打包运行。(package指令范围内)

在这里插入图片描述

在这里插入图片描述

Web入门

Springboot 入门

Spring | Home

Spring发展到今天已经形成了一种开发生态全,Spring提供了若干子项目,每个项目用于完成特定的功能

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

HTTP协议

概念: H y p e r    T e x t    T r a n s f e r    P r o t o c o l Hyper \; Text \; Transfer \; Protocol HyperTextTransferProtocol:超文本传输协议,规定了浏览器和服务器之间的数据传输的规则。

1730342449059.png

特点

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

HTTP协议-请求数据格式

1730344272196.png

常见请求头和请求头的含义

1730344354734.png

1730344541035.png

1730344614004.png


http协议中请求数据一共包括三个部分:

  • 请求行:请求数据的第一行
  • 请求头:(key:value)
  • 请求体:(与请求头之间隔了一个空行)

http请求数据获取

web服务器(tomcat)对http请求的数据进行解析,并进行了封装 ( H t t p S e r v l e t R e q u e s t ) (HttpServletRequest) HttpServletRequest,在调用 C o n t r o l l e r Controller Controller方法的时候传递给了该方法。这样,就使得程序员不必直接对http协议进行操作,让web开发更加便捷。


http响应协议

响应数据的格式

1730357591280.png

响应行中的状态码

1730357803302.png

  • 200:请求成功被响应

  • 404:请求资源不存在,客户端错误

  • 500:服务器端抛异常

响应头:

1730358328899.png


响应数据设置

web服务器对HTTP协议的响应数据进行了封装 ( H t t p S e r v l e t R e s o o n s e ) (HttpServletResoonse) (HttpServletResoonse),并在调用 C o n t r o l l e r Controller Controller方法的时候传递给了该方法.这样,就是得程序员不用直接对协议进行操作.(和请求数据设置的是一样的)

1730358775123.png

第一种方式设置响应数据:

package com.example;

import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

@RestController
public class ResponseController {
    @RequestMapping("/response")
    public  void response(HttpServletResponse response) throws IOException {
        //1.设置响应状态码
        response.setStatus(401);
        //2.设置响应头
        response.setHeader("Content-Type","text/html;charset=utf-8");
        //3.设置响应体
        response.getWriter().write("hello response");

//        return "response";
    }
}

第二种方式设置响应数据(Spring提供的一种方法)基于 R e s p o n s e E n t i t y ResponseEntity ResponseEntity

@RequestMapping("/response2")
    public ResponseEntity<String> response2() {

        return ResponseEntity
                .status(401)
                .header("name","javaweb")
                .body("hello response2");
    }

1730388263093.png

两种方式的总结:

1730388289924.png


三层架构

  • controller:控制层,接收前端发送的请求,对请求进行处理,并相应数据
  • service:业务逻辑层,处理具体的业务逻辑
  • dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查。

1730437936011.png

带impl后缀的一般是一个实现类

1730453553297.png

分层解耦

耦合:用来衡量软件中各个层/各个模块的依赖关联程度

内聚:软件中各个功能模块内部的功能联系

解耦的思路:将对象交给一个容器管理,而不是在一层中去new另一层的对象

而交给容器管理对象需要用到spring中提供的两个工具,一个是控制反转,一个是依赖注入

1730454241732.png

控制反转 i n v e r s i o n    o f    c o n t r o l    inversion \; of \; control\; inversionofcontrol简称 I O C IOC IOC。对象创建的控制权由程序自身转移到了外部(容器),这种思想被称为控制反转

依赖注入 D e p e n d e n c y    I n j e c t i o n    Dependency \; Injection \; DependencyInjection简称 D I DI DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。

Bean对象 I O C IOC IOC容器中创建、管理的对象,称之为 B e a n Bean Bean对象。

I O C & D I IOC\&DI IOC&DI入门

  1. D a o Dao Dao S e r v i c e Service Service层的实现类,交给 I O C IOC IOC容器管理
  2. C o n t r o l l e r Controller Controller S e r v i c e Service Service注入运行时所依赖的对象

实现上面的第一步需要一个注解@Component,在类前面加上@Component表示将这个类交给 I O C IOC IOC容器进行管理

实现上面的第二步只需要在成员变量上加上@Autowired即可,这个注解的作用就是在运行时,自动去 I O C IOC IOC容器中找到对应类型的 B e a n Bean Bean对象赋值给当前类中创建的引用

1730455333831.png

1730455775677.png

I O C IOC IOC D I DI DI详解

要把某个对象交给 I O C IOC IOC容器管理,需要在对应的类上加上如下注解之一:

1730459774411.png

声明 b e a n bean bean的时候,可以通过注解的 v a l u e value value属性指定 b e a n bean bean的名字,如果没有指定,默认为类名首字母小写

  • 上面的 b e a n bean bean的四大注解,要想在声明之后生效,还需要被 组件扫描注解 @ C o m p o n e n t S c a n @ComponentScan @ComponentScan
  • 但是在实际开发中,虽然我们没有显示配置,但是这个注解实际上已经包含在启动类声明注解 @ S p r i n g B o o t A p p l i c a t i o n @SpringBootApplication @SpringBootApplication中,默认的扫描范围是启动类所在包及其子包。

1730462819956.png

1730463193117.png


D I DI DI依赖注入

基于@ A u t o w i r e d Autowired Autowired 进行依赖注入的常见方式有如下三种:

  1. .属性注入

    1730463691956.png

  2. .构造函数注入

    1730463782526.png

  3. .setter注入

1730463853646.png

1730464425386.png

真实的项目中,很多企业都是用第一种属性注入,代码更加简洁。

@ A u t o w i r e d Autowired Autowired注解,默认是按照类型进行注入的。

如果存在多个相同类型的 b e a n bean bean,将会报出错误.

1730464674227.png

解决方案如下:

  1. 在我们要注入的 b e a n bean bean上面加上@ P r i m a r y Primary Primary注解
  2. 通过@ Q u a l i f i e r Qualifier Qualifier来指定我们要注入哪个 b e a n bean bean,@ Q u a l i f i e r Qualifier Qualifier v a l u e value value属性中指定要注入 b e a n bean bean的名字
  3. @ R e s o u r c e Resource Resource注解

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/906013.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是FUSE用户态文件系统

零. 文件系统 1. 为什么要有文件系统 文件系统是操作系统中管理文件和目录的一种机制。它提供了组织、存储、检索和更新文件的方法&#xff0c;主要如下&#xff1a; 数据组织&#xff1a;文件系统将数据组织成文件和目录&#xff0c;使用户能够更方便地管理和查找文件。每个…

品牌怎么找到用户发的优质内容,进行加热、复制?

在&#xff0c;相对传统媒体来说&#xff0c;社交媒体营销具有更高的成本效益。品牌可以通过相对较低的成本达到大量潜在客户&#xff0c;尤其是通过口碑营销和内容分享&#xff0c;可以实现倍增的传播效果。在社媒营销的过程中&#xff0c;去找到与品牌有关的优质、正向内容&a…

梁山派入门指南3——串口使用详解,包括串口发送数据、重定向、中断接收不定长数据、DMA+串口接收不定长数据,以及对应的bsp文件和使用示例

梁山派入门指南3——串口使用详解&#xff0c;包括串口发送数据、重定向、中断接收不定长数据、DMA串口接收不定长数据&#xff0c;以及对应的bsp文件和使用示例 1. 串口发送数据1.1 串口简介1.2 梁山派上的串口开发1.3 bsp_uart文件&#xff08;只发送不接收&#xff0c;兼容串…

notepad++ compare插件的离线下载和安装

一、离线安装 去改地址找到最新的插件&#xff1a;https://github.com/notepad-plus-plus/nppPluginList/blob/master/doc/plugin_list_x64.md下载之后复制到插件文件夹&#xff0c;插件文件夹的打开方式如下 注意目录&#xff1a; 二、问题汇总 &#xff08;1&#xff09…

你的网站需要防护吗?

你的网站经常被恶意爬虫&#xff0c;重要数据被批量搬运吗&#xff1f; 你想知道你的网站是不是安全的&#xff0c;有没有被 xss攻击、sql注入、命令注入等等这些乱七八糟的攻击手段攻击吗&#xff1f; 2014年我还是学生的时候&#xff0c;负责学院官网的维护&#xff0c;一…

在postman设置请求里带动态token,看看这两种方法!

问题描述 在使用postman调试接口时&#xff0c;遇到一些需要在请求里加上token的接口&#xff0c;若token出现变化&#xff0c;需要手动修改接口的token值&#xff0c;带来重复的工作量&#xff0c;翻看postman使用手册后&#xff0c;我发现了两种方法可以解决这个问题。 01 …

商家如何在高德地图上申请店铺入驻?

在当今数字化时代&#xff0c;互联网成为了消费者寻找商品和服务的主要渠道。高德地图作为国内领先的地图导航软件&#xff0c;不仅拥有庞大的用户基础&#xff0c;还为商家提供了优质的店铺展示平台。因此&#xff0c;对于实体店商家而言&#xff0c;入驻高德地图是提升店铺曝…

Java并发常见面试题总结(下)

Map&#xff08;重要&#xff09; HashMap 和 Hashtable 的区别 线程是否安全&#xff1a; HashMap 是非线程安全的&#xff0c;Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。&#xff08;如果你要保证线程安全的话就使用 ConcurrentHashMa…

数字化导师坚鹏:2025年银行开门红营销规划、方法及案例工作坊

2025年银行开门红营销规划、方法及案例工作坊 ——数字化赋能 新策略启航 开门红必胜 课程背景&#xff1a; 面对即将打响的开门红战役&#xff0c;很多银行存在以下问题&#xff1a; 不知道如何分析银行开门红面临形势及机遇&#xff1f; 不知道如何制定科学高效的开…

普通的Java程序员,需要深究源码吗?

作为Java开发者&#xff0c;面试肯定被问过多线程。对于它&#xff0c;大多数好兄弟面试前都是看看八股文背背面试题以为就OK了&#xff1b;殊不知现在的面试官都是针对一个点往深了问&#xff0c;你要是不懂其中原理&#xff0c;面试就挂了。可能你知道什么是进程什么是线程&a…

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞 7、TOP 10漏洞7.1 SQL注入 1、基础知识部分 识别base64编码…

MYSQL---TEST5(Trigger触发器综合练习)

触发器Trigger 数据库mydb16_trigger创建 表的创建 goods create table goods( gid char(8) primary key, #商品号 name varchar(10), #商品名 price decimal(8,2), #价格 num int&#xff1b;&#xff09; #数量orders create tabl…

layui 自定义验证单选框必填

对于输入框类型必填验证&#xff0c;只需要在 input 输入框加入 lay-verify "required" 即可。但对于单选按钮这种特殊的该怎么办呢&#xff1f;layui 为我们提供了自定义验证。 1. 在单选按钮上添加自定义验证的名称 2. 验证规则如下 // 单选框自定义验证form.ve…

OpenCV开发笔记(八十二):两图拼接使用渐进色蒙版场景过渡缝隙

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/143432922 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

「C/C++」C/C++标准库 之 #include<ctime> 时间日期库

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

安达发|零部件APS车间排程系统销售预测的优点

2024制造业面临着前所未有的挑战与机遇。为了保持竞争力&#xff0c;企业必须确保其生产系统能够高效、灵活地运作。在这方面&#xff0c;采用高级计划与排程系统&#xff0c;特别是零部件APS车间排程系统的预测方法&#xff0c;已成为提升生产效率和响应能力的关键策略。这种系…

【笔试刷题】笔记4

目录 1、过河卒 dfs bfs 动态规划 2、扑克牌顺子 排序 模拟 找规律 3、最长回文子串 中心拓展法 1、过河卒 5493. 过河卒 - AcWing题库 这道题我们很容易就能够想到dfs或bfs&#xff0c;但这两种算法都是会超时的 dfs #include <iostream> #include <v…

大模型中的token是什么;常见大语言模型的 token 情况

目录 大模型中的token是什么 常见大语言模型的 token 情况 大模型中的token是什么 定义 在大模型中,token 是文本处理的基本单位。它可以是一个字、一个词,或者是其他被模型定义的语言单元。简单来说,模型在理解和生成文本时,不是以完整的句子或段落为单位进行一次性处理…

kafka里的consumer 是推还是拉?

大家好&#xff0c;我是锋哥。今天分享关于【kafka里的consumer 是推还是拉&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka里的consumer 是推还是拉&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;消费者&…

少儿编程培训市场突破500亿元:教育新蓝海的崛起与未来展望

近年来&#xff0c;随着科技的迅速发展和家长对教育方式的重视&#xff0c;少儿编程市场成为一片新的蓝海。据最新市场调研报告显示&#xff0c;2024年中国少儿编程培训市场规模已突破500亿元&#xff0c;预计未来五年将持续增长。这一趋势反映了少儿编程教育的迅速崛起&#x…