1,Maven
- 概述
管理jar包: 下载,保存,编译,更新…
仓库:
- 远程仓库/中央仓库: 本质山就是一个国外的网址
- 镜像仓库: 就是一个国内的网址,已经帮你下载好了jar包
- 本地仓库: 就是一个你自己创建的文件夹,存放下载好的jar包的 (D:\Java\maven\resp)
坐标:存放jar包的路径
依赖:Ajar包可能会依赖着好多jar包,maven都会管理所有jar包
- 使用步骤
- 解压maven压缩包,能找到settings.xml文件,需要改两处(本地 仓库+镜像仓库)
- settings.xml文件
- 在 IDEA里用maven
- 创建Maven工程
File -New -Project -选Maven-输入工程名和域名 -finish
- 配置maven
- 找到maven: File- Settings- Build,execution…- Build Tools- Maven – 配置最后三行
- 配置maven的解压文件的路径 和 settings.xml文件的路径
- 修改pom.xml文件,添加jar包的坐标
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.tedu</groupId>
<artifactId>cgb2107maven02</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 管理jar包,提供坐标,Maven自动下载依赖的 -->
<dependencies>
<!--添加jar包,jdbc的坐标,groupId组id,artifactId是项目
id,version是jar包的版本-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--jar包的版本要和数据库的版本一致,5.X的jar包对
应5.X的数据库-->
<version>5.1.48</version>
<!-- <version>8.0.15</version> -->
</dependency>
</dependencies>
</project>
- 检查本地仓库
- 常用的maven命令
- Spring Boot
- 概述
- 简化了Maven的操作(用啥jar包就添加一个jar包的坐标)
- 内嵌了Tomcat服务器,可以访问服务器里的程序
- 项目结构
- 创建StringBoot工程
- 给工程配置maven信息
- string boot 的pom.xml
- 给服务器添加资源
- 项目结构
- 添加HelloBoot类
package cn.tedu.cgb2107boot01;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//想让浏览器访问类,方法吗?必须使用两个注解才行
@RestController
//作用:是springmvc框架提供的,用来让浏览器访问类的+只能用在类上
@RequestMapping("hello")//作用:规定了访问方式+可以在类上或者方法上用
public class HelloBoot {
//浏览器:http://localhost:8080/hello/abc
@RequestMapping("abc")
public String hello(){
return "hello spring boot" ;//返回给浏览器!!!
}
//浏览器:http://localhost:8080/hello/get
@RequestMapping("get")
public void get(){
System.out.println(100);
}
}
- 重启服务器
- 测试
- StringMVC
- 概述
是Spring框架的明星产品,用来 接受浏览器发来的请求 + 并返回数据
遵循MVC思想: 主要是想要松耦合,实现代码间的高内聚, 提高代码的可维护性
M 是Model, 模型层, 用来封装数据
V 是View, 视图层, 用来展示数据
C 是Controller, 控制层 作用就是用来 接受请求和给出响应
- 工作原理
五个核心的组件
- 前端控制器DispatcherServlet: 接受请求并分发请求
- 处理器映射器HandlerMapping: 根据请求,找到具体能处理请求 的类名,方法名
- 处理器适配器HandlerAdapter: 正式开始调用方法处理请求,并 返回结果
- 视图解析器ViewResolver: 把页面找到,把数据进行解析
- 视图渲染View: 具体展示数据并返回给浏览器
- 测试
创建maven module
选中工程-右键-New-Module-选中Maven-next-输入module名 -finish
创建启动类
package cn.tedu.hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication//作为启动类,用来启动服务器
public class RunApp {
public static void main(String[] args) {
//利用springboot运行指定类
SpringApplication.run(RunApp.class);
}
}
- StringMVC框架
- 概述
主要作用: 接受请求 + 做出响应
使用步骤:
- 导入jar包 (核心: spring-webmvc.jar),被springboot简化了
- 创建启动类,启动服务器
- 准备服务器里的资源,可以被浏览器访问
- 入门案例
- 项目结构
- 创建启动类
package cn.tedu.hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication//springboot提供的,表示自己是一个启动类,用来启动服务器
public class RunApp {
public static void main(String[] args) {
//SpringApplication是springboot提供的,启动指定类
SpringApplication.run(RunApp.class);
}
}
- 创建CarController类
package cn.tedu.hello;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//需求: http://localhost:8080/car/get
@RestController//是springmvc提供的,可以被浏览器访问
@RequestMapping("car")//是springmvc提供的,规定了浏览器访问这个类的方式
public class CarController {
//访问方式:http://localhost:8080/car/get
@RequestMapping("get")
public void get(){
System.out.println("浏览器访问成功!");
}
}
- 测试
打开浏览器访问: http://localhost:8080/car/get
- springmvc框架解析请求参数
- get方式
把数据用?拼接在地址栏中,多数据之间用& 连接 :
http://localhost:8080/car/add?id=10
(1)解析复杂的参数
package cn.tedu.hello;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//需求: http://localhost:8080/car/get
/*
总结:
1, SpringMVC可以接受请求,并解析请求参数
只要在方法的参数列表中声明就可以:public void add(int id,String name)
2, 为了避免400或者500的异常,最好把参数列表的参数类型改成引用类型
改后:public void add(Integer id,String name)
3, 参数列表可以提供一个对象,框架可以解析参数,并且可以把参数直接给对象的属性赋值
public void save2(Car c)
*/
@RestController//是springmvc提供的,可以被浏览器访问
@RequestMapping("car")
//是springmvc提供的,规定了浏览器访问这个类的方式
public class CarController {
@RequestMapping("get")
public void get(){
System.out.println("浏览器访问成功!");
}
//springmvc解析get方式的请求参数
//练习1: http://localhost:8080/car/add?id=10
@RequestMapping("add")
public void add(Integer id){
//参数列表的写法:1,参数类型必须和请求的参数类型一致 2,参数名
称必须和请求的参数名称一致
System.out.println("浏览器访问成功add!"+id);
}
//练习2: http://localhost:8080/car/add2?id=10&name=jack
@RequestMapping("add2")
public void add(Integer id,String name){
System.out.println("浏览器访问成功add!"+id+name);
}
//练习3:
http://localhost:8080/car/save?id=1&color=red&price=100
//HandlerMapping:处理器映射器,拿着地址栏的访问方式找到哪个类
哪个方法
//Map<String,Object> {"/car/save", new CarController().save()}
@RequestMapping("save")
public void save(Integer id,String color,Double price){
//基本类型的参数,访问时必须传参否则400 500异常,
//引用类型不传入参数也行,就会用默认值null
//优化1:推荐使用引用类型,因为规避了异常的发生!!!
System.out.println(id+color+price);
}
//练习4:
http://localhost:8080/car/save2?id=1&color=red&price=100&pinpai=BMW&type=X7
//框架的作用:1,解析了请求参数 2,把解析到的参数调用c.setXxx()
设置值
@RequestMapping("save2")
public void save2(Car c){
System.out.println(c);
//Car{id=1, color='red', price=100.0, pinpai='BMW',
type='X7'}
}
}
(2)创建Car类
package cn.tedu.hello;
//http://localhost:8080/car/save2?
// id=1&color=red&price=100&pinpai=BMW&type=X7
//这个类用来存,springmvc框架解析到的请求参数
public class Car {
private Integer id;
private String color;
private Double price;
private String pinpai;
private String type ;
//set get tostring --右键-generate
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getPinpai() {
return pinpai;
}
public void setPinpai(String pinpai) {
this.pinpai = pinpai;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String toString() {
return "Car{" +
"id=" + id +
", color='" + color + '\'' +
", price=" + price +
", pinpai='" + pinpai + '\'' +
", type='" + type + '\'' +
'}';
}
}
- restful方式
- 在IDEA里创建后端代码UserController类
package cn.tedu.hello;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//需求:解析restful风格提交的数据,简化了get提交数据的写法
//普通get方式:http://localhost:8080/user/insert?id=1&name=张三&age=18
//restful方式:http://localhost:8080/user/insert/1/张三/18
@RestController
@RequestMapping("user")
public class UserController {
//解析get数据:http://localhost:8080/user/insert?id=1&name=张三&age=18
@RequestMapping("insert")
public Object insert(Integer id,String name,Integer age){
return id+name+age;
}
//解析restful数据:http://localhost:8080/user/insert2/1/张三/18
//步骤:1,利用{}获取地址栏中的参数,个数和顺序要和地址栏里的参数匹配
//2,利用@PathVariable注解,获取花括号中间的变量的值
@RequestMapping("insert2/{id}/{name}/{age}")
public void insert2(@PathVariable Integer id,
@PathVariable String name,
@PathVariable Integer age){
System.out.println(id+name+age);
}
- 在HB里创建前端HTML代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>前后端整合</title>
</head>
<body>
<a href="http://localhost:8080/user/insert">
普通访问</a>
<a href="http://localhost:8080/user/insert?
id=10&name=rose&age=20">普通的get提交方式</a>
<a href="http://localhost:8080/
user/insert2/10/rose/20">restful方式</a>
</body>
</html>
- 测试
- 练习
需求:
练习:http://localhost:8080/car/save2?
id=1&color=red&price=100&pinpai=BMW&type=X7
<1>解析浏览器发来的请求参数
<2>给浏览器返回数据
修改前端页面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>前后端整合</title>
</head>
<body>
<a href="http://localhost:8080/user/insert">
普通访问</a>
<a href="http://localhost:8080/user/insert?
id=10&name=rose&age=20">普通的get提交方式</a>
<a href="http://localhost:8080/user/insert2
/10/rose/20">restful方式</a>
<a href="http://localhost:8080/car/save3?
id=1&color=red&price=100&pinpai=BMW&type=X7">
点我获取汽车数据</a>
</body>
</html>
修改后端代码,创建类
package cn.tedu.hello;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("car")
public class CarController2 {
//1,解析浏览器发来的请求参数
//http://localhost:8080/car/save3?
id=1&color=red&price=100&pinpai=BMW&type=X7
@RequestMapping("save3")
public Object save3(Car c){
//TODO 把解析到的请求参数 getXxx()入库--jdbc
//pom里加jdbc的坐标
//在数据库里创建car表
(提供id,color,price,pinpai,type字段)
//注册驱动 获取数据库连接 获取传输器
执行SQL 解析结果集 释放资源
//{"id":1,"color":"red","price":100.0,
"pinpai":"BMW","type":"X7"}
return c;
}
}