web后端01

maven

介绍

管理和构建java项目的工具  基于项目对象模型(POM project object model)的概念,通过一小段描述信息来管理项目的构建

官网  http://maven.apache.org/

作用

依赖管理

方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题

统一项目结构

提供标准,统一的项目结构

项目构建

标准跨平台的自动化项目构建方式

安装

下载maven

   http://​  http://maven.apache.org/ ​

zip则解压

配置本地仓库

需要新建一个目录mvn_repo

修改conf/settings.xml中的<localRepository>为一个指定目录库  大概在53行

<Repository>D:\apache-meaven\apache-maven-3.8.8\mvn_repo</localRepository>

配置阿里云私服

修改config/settings.xml中的<mirrors>标签,添加如下子标签148行

<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

配置环境便变量

MAVEN-HOME为maven的解压目录,并将其bin目录加入PATH环境变量

测试

cmd中  mvn -v

IDEA集成Maven

去官网下载idea2021.1.1版本

先创建空项目

empty project

配置maven环境

第一种方法

        打开project structure的project settings, sdk里设置jdk   language level设置为所选jdk版本,   apply,  ok

        打开file settings  build 下的build tool, maven 的patyh设置为maven安装目录,设置user settings file选为apache-meaven下的config下的settings.xml  应用,maven下的runner,jre选择jdk版本

        build下的compiler下的java compiler设置project bytecode version设置为jdk版本号

都需要apply  和ok

第二种配置maven环境(全局)

点击file 下的close project选择customize下的all settings..其余过程和上述一样(即配置path,user settings file 选择jdk版本号)

创建maven项目

选择模块创建maven

file,  new module 创建模块选择maven,点击next

点击artificial配置 填写模块名称,坐标信息,finish,artifactld(模块名)

注意路径要设置到所创建的目录中

archetype选择如下这个是最新版本的可以不看

maven-archetype-profiles jar

main/java & main/resources & test/java

在这里插入图片描述

test目录下新建resources文件夹

编写代码,并运行

main java下创建类java class连包带类com...前面为包名后面为类名

class中编写main方法

 public static void main(String[] args) {
        System.out.println("hello maven");
    }

运行

maven坐标

资源的唯一表示,通过该坐标可以唯一定位资源位置

groupid:定义maven项目隶属组织名称(通常为域名反写)

artifactld:定义当前maven项目名称(通常是模块名称)

version:当前项目版本号

导入maven项目

点击右侧maven里面的加号就可以导入pom.xml(或者 点击file 里面选project structure 选modules上面的加号 import module选pom.xml文件)

点击项目右击remove module为删除

依赖管理

依赖配置

依赖

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

配置

pom.xml中编写<dependencies>标签

<dependencies>中使用<dependency>引入坐标

定义坐标的groupld,artifacld,version

不知道依赖可以到https://mvnrepository.com/中搜索

点击刷新按钮,引入最新加入的坐标load maven changes

可以在maven里的dependency里检查

依赖传递 

依赖具有传递性

直接依赖:当前项目中通过依赖配置建立的依赖关系

间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

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

依赖范围

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

作用范围

主程序范围有效(main文件夹范围内)

测试程序范围有效(test文件夹范围内)

是否参与打包运行(package指令范围内)

生命周期

概念

对所有的maven项目构建过程进行抽象和统一

maven有3套互相独立的生命周期

clean:包含(phase)clean:移除上一次构建生成的文件

default:核心工作,编译,测试,打包,安装,部署等

                compite:编译项目源代码

                test:使用合适的单元测试框架运行测试(juniit)

                package:将编译后的文件打包  如jar,war

                install:安装项目到本地仓库

site:生成报告,发布站点等

每套生命周期包含一些阶段(phase),阶段有顺序,后面的阶段依赖于前面的阶段

同一套生命周期中,运行后面的阶段时,前面的阶段都会运行

执行:

maven工具栏,选中对应的生命周期,双击执行 (或者在命令行中 mvn  clean(compile/package/test))

SpringBootWeb入门

ideal实例

创建springboot工程,勾选web开发相关依赖

新建module

选择 spring initiallzr

dependencies:web中选:spring web依赖

定义HelloController类,添加方法hello,和注解

在包上新建javaclass:包和类

新建的类中代码如下

package com.itheima.springbootwebquicktstart.controller;

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("HelloWorld");
        return "HelloWorld";
    }
}

运行测试

运行main方法

浏览器中 localhost:8080/hello

HTTP协议

概述

hyper text transfer protocol超文本传输协议,规定了浏览器和服务器之间数据传输的原则

特点

1基于TCP协议:面向连接,安全

2基于请求-响应模型的:一次请求对应一次响应

3HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求都是独立的

        缺点:多次请求间不能数据共享

        优点:速度快

请求协议

HTTP-请求数据格式

响应协议

状态码大类

1xx 响应中--临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果他已经完成则忽略他

2xx 成功--表示请求已经被成功接收,处理完成

3xx 重定向--重定向到其他方向,它让客户端再发起一个请求以完成整个处理

4xx 客户端错误--处理发生错误,责任在客户端 如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等

5xx 服务器端错误--处理发生错误,责任在服务端 如:服务端抛出异常,路由出错,HTTP版本不支持

常见的状态响应码

200 OK 客户端请求成功,即处理成功

404 Not Found 请求资源不存在,一般是url输入有误或者网站资源被删除

500 Internal Server Error 服务器发生不可预期的错误。服务器出异常了,去日志看看

状态码大全:https://blog.csdn.net/weixin_63149034/article/details/126365189

响应头

Content-Type表示该响应内容的类型,例如text/html,application/json

Content-Length 表示该响应内容得长度(字节数)

Content-Encoding 表示该响应压缩算法.例如gzip

Cache-Control指示客户端应如何缓存.例如max-age=300表示最多缓存300秒

Set-Cookie告诉浏览器为当前页面所在的域设置cookie

协议解析

web服务器-Tomcat

web服务器

是一个软件程序,对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让web开发更加便捷。

部署web项目主要功能是“提供网上信息浏览服务”

Tomcat简介

开源免费轻量级web服务器,支持Servlet/JSP少量JavaEE(java企业级开发的技术规范总合)规范      也被称为web容器,servlet容器。servlet程序需要依赖tomcat才能运行

官网https://tomcat.apache.org/

基本使用

bin 可执行文件

conf 配置文件

lib tomcat依赖的jar包

logs 日志文件

temp 临时文件

webapps 应用发布目录

work 工作目录

启动:双击bin\startup.bat

        控制台中文乱码  在51行:修改conf/logging.properties  

关闭:  

        直接x掉运行窗口:强制关闭

        bin/shutdown.bat:正常关闭

        ctrl+c:正常关闭

常见问题

        启动窗一闪而过:检查JAVA_HOME环境变量是否正确配置

        端口号冲突:找到对应程序,将其关闭

                打开任务管理器 详细信息 输入j 结束掉所有java进程

        配置tomcat端口号(conf/server.xml)69行

注意事项:HTTP协议默认端口号为800,若将tomcat端口号改为80,将来访问tomcat时,不用输入端口号

Tomcat部署

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

入门程序解析

SpringBootWeb入门程序解析

起步依赖:

spring-boot-starter-web包含了web应用开发所需要的常见依赖

spring-boot-starter-test包含了单元测试所需要的常见依赖

官方所提供的starter:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.build-systems.starters

内嵌tomcat服务器

启动类运行时,自动启动内嵌的tomcat服务器

请求响应

请求(HttpServletRequest):获取请求数据

响应(HttpServletResponse):设置响应数据

BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据存储在服务器(维护方便  体验一般)

CS架构:Client/Server,客户端/服务器架构模式。(开发,维护麻烦   体验不错)

请求:

postman

网页调试与发送网页HTTP请求的Chrome插件

作用:常用于进行接口测试

使用:

点击 create workspace 

点击加号“+”  请求方式  请求路径

保存  

简单参数

原始方式

springboot方式

简单参数:参数名与形参变量名相同,定义形参即可接收参数

若方法形参名称与请求参数名称不匹配,可以使用@RequestParam完成以映射

@RequestParam中的required属性默认为true,代表该请求参数必须传递,不传递将报错。

可将required属性设置为false

实体参数

简单实体对象:

请求参数名与形参对象属性名相同,定义POJO接收即可

复杂实体对象

请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套pojo属性参数

数组集合参数

数组参数:

请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数

集合参数

请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系

日期参数
日期参数

使用@DateTimeFormat注解完成日期参数格式转换

Json参数

JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要@RequestBody标识

路径参数

通过请求URL直接传递参数,使用{...}来标识该路径的参数,需要使用@PathVariable获取路径参数

响应

响应数据

@ResponseBody

类型:方法注解,类注解

位置:Controller方法上/类上

作用:将方法返回值直接响应,若返回值类型是实体对象/集合,将转换为JSON格式响应

说明:@RestController=@Controller+@ResponseBody;

统一响应结果

案例

获取员工数据,返回统一响应结果,在页面渲染展示

在pom.xml文件中引入dom4j的依赖,用于解析XML文件

    <dependencies>
         <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
    </dependencies>

之后点击maven的刷新

引入资料中提供的解析XML的工具类XMLParserUtils,对应的实体类Emp,XML文件emp.xml

java项目中中新建包utils ,将工具类放入

实体类emp放入java中pojo目录下

emp.xml放入resources中

引入资料中提供的静态页面文件,放在resources下的static目录下

编写Controller程序,处理请求,响应数据

包中新建java类

编写程序

最后启动springboot

分层解耦

三层架构

controller:控制层,接受前端发送的请求,对请求进行处理,并响应数据

service:业务逻辑层,处理具体的业务逻辑

dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增删改查

分层解耦

内聚

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

耦合

衡量软件中各个层/模块之间的依赖,关联程度

软件设计原则:

高内聚低耦合

分层解耦

控制反转:

inversion of control简称 ioc。对象的创建控制权由程序自身转移到外部(容器),

依赖注入

dependency injection简称DI ,容器为应用程序提供运行时,所依赖的资源,

bean对象

IOC容器中创建,管理的对象,称之为bean

IOC&DI入门

1service层及dao层的实现类,交给IOC容器

加上@Compoent   //将当前类交给IOC容器管理,成为IOC容器中的bean

2为controller及service注入运行时,依赖的对象

加上@Autowired  //运行时,IOC容器会提供该类型的bean对象,并赋值给该变量 --依赖注入

3运行测试

IOC详解

Bean的声明

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

@Component  声明bean的基础注解   不属于以下三类时,用此注解

@Controller        @Component的衍生注解        标注在控制器类上

@Service        @Component的衍生注解        标注在业务类上

@Repository        @Component的衍生注解        标注在数据访问类上(与mybatis整合,用的少)

声明bean的时候,可以通过value属性指定bean的名字,若没有指定,默认为类名首字母小写

使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller

bean组件扫描

前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描

@ComponentScan注解虽然没有显式配置,但实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在的包及其子包

DI详解

bean注入

@Autowired注解,默认是按照 类型 进行,如果存在多个相同类型的bean,报错:

解决:

@Primary        @Autowired(spring)+@Qualifier        @Resource(JDK提供的注解,默认按名称注入)

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值