Spring
创建springboot工程,并勾选web开发相关依赖
定义HelloController类,添加方法hello,并添加注解
运行测试
1. HTTP协议
1.1 概述
Hyper Text Transfer Protocol 超文本传输协议
基于TCP协议,面向连接安全,一次请求对应一次响应,无状态协议
多次请求间不能共享数据,速度快
1.2 请求协议
请求数据格式 | : |
---|---|
请求行 | 请求方式、资源路径、协议 |
请求头 | key:value |
Host,User-Agent,Accept | 主机名,浏览器版本,接收资源类型 |
Accept-Language,Accept-Encoding | 浏览器偏好语言,支持压缩类型 |
Content-Type,Content-Length | 请求主体数据类型,大小 |
请求体 | POST请求,存放请求参数,GET请求大小有限制 |
1.3 响应协议
响应行:协议、状态码、描述
响应码 | 说明 |
---|---|
1xx | 响应中,临时状态码,表示请求被接受 |
2xx | 成功,处理完成 |
3xx | 重定向 |
4xx | 客户端错误,请求了不存在的资源、客户端未被授权、禁止访问 |
5xx | 服务器错误,程序抛出异常 |
响应头:键值对
Content-Encoding响应压缩算法,Cache-Control提升客户端如何缓存,Set-Cookie 为当前所在域设置cookie
响应体
1.4 web服务器-Tomcat
Tomcat是Apache软件基金会的一个核心项目,开源免费的轻量级web服务器,支持少量JavaEE规范
JavaEE(Java Enterprise Edition)企业版,包含13项技术规范:JDBC,JNDI,EJB,RMI,JSP,Servlet,XML,JMS,Java IDL,JTS,JTA,JavaMail,JAF
起步依赖 spring-boot-starter-web/test
2. web后端
- 前端控制器,Browser/Server架构:HttpServletRequest获取请求数据、DispatcherServlet、HttpServletReponse设置响应数据
Client/Server 客户端/服务器架构模式
2.2 postman
网页调试与发送网页HTTP请求的chrome插件
2.2.1 简单请求参数
- 原始方法获取请求参数,Controller方法形参中声明HttpServletRequestduix,然后调用对象的getParameter参数名
- 请求参数名与方法形参相同,自动进行类型转换
- 若名称不匹配通过@RequestParam完成映射,请求参数必须传递
参数类型 | 说明 |
---|---|
实体参数 | 请求参数名与形参对象属性名相同,定义POJO接收即可 |
数组参数 | 请求参数名与形参数组变量名相同,可以直接使用数组封装 |
集合参数 | 请求参数名与形参数组变量名相同,通过@RequestParam绑定参数 |
日期参数 | 使用@DateTimeFormat注解完成日期参数格式转换 |
JSON参数 | POST-raw-JSON @RequestBody |
路径参数 | /path/{id},@PathVariable |
-
响应数据:Controller方法或类上,将方法返回值直接响应,若是实体对象或集合会转为JSON格式响应
@RestController = @Controller +@ResponseBody; -
实例:
- 在pom.xml文件中引入dom4j的依赖,用于解析XML文件
- 引入解析XML的工具类utils,实体类Emp,XML文件Emp.xml
- 静态页面文件放在resource的static下
- 编写Controller程序,处理请求响应数据
3. 分层解耦
-
三层结构:
Dao:数据访问(增,删,改,查)
service:业务逻辑层,处理具体的逻辑
Controller控制层:接受请求响应数据 -
分层耦合
内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层、模块之间的依赖程度。
设计原则:高内聚低耦合 -
控制反转:Inversion of Control (IOC)。对象的创建控制权转移到外部容器
依赖注入:Dependency Injection(DI) 容器为应用程序提供运行时依赖的资源
Bean对象:IOC容器中创建管理的对象 -
删掉new对象,通过@Component交给IOC容器管理,
@Autowired依赖注入,默认按类型进行,加上@Primary设置优先级
@Qualifier("") @Autowired,@Resource(name = "")
@Component声明bean的基础注解,@Controller标注在控制器类,@Service业务类,@Repository数据访问类,value可指定bean名字,默认为类名首字母小写
还需要被组件扫描注解@ComponentScan({})扫描,默认扫描当前包及其子包
将dao包放在java目录下