Web后端开发-请求响应
请求(HttpServletRequest):获取请求数据
响应(HttpServletResponse):设置响应数据
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。(京东淘宝等网站)
CS架构:Client/Server,客户端/服务端架构模式。(QQ,微信等客户端)
请求
postman
postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。
作用:常用于进行接口测试
(Apipost、Apifox)
简单参数接收
1.原始方式获取请求参数
- Controller方法形参中声明HttpServletRequest对象
- 调用对象的getParameter(参数名)
2.SpringBoot中接收简单参数
- 请求参数名与方法形参变量名相同
- 会自动进行类型转换
3.@RequestParam注解
- 方法形参名称与请求参数名称不匹配,通过该注解完成映射
- 该注解的required属性默认时true,代表请求参数就必须传递,有必要的话可以将required设置为false,那就代表它是一个可选的参数,可以传递可以不传递
实体对象参数
规则:请求参数名与形参对象属性名相同,即可直接通过POJO接收
数组集合参数
数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系
日期参数
日期参数:使用@DataTimeFormat注解完成日期参数格式转换
(例如:"yyyy-MM-dd HH:mm:ss")
Json参数
JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识
路径参数
路径参数:通过请求URL直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable获取路径参数
响应
响应数据
@ResponseBody
- 类型:方法注解、类注解
- 位置:Controller方法上/类上
- 作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应
- 说明:@RestController = @Controller + @ResponseBody;
统一响应结果
Result(code、msg、data)
public class Result{
//响应码,1代表成功;0代表失败
private Integer code;
//提示信息
private String msg;
//返回的数据
private Object data;
//...
}
统一返回 json 格式
案例
获取员工数据,返回统一响应结果,在页面渲染展示
- 在pom.xml问价中引入dom4j地依赖,用于解析XML文件
- 引入资料中提供的解析XML地工具类XMLParserUtils、对应的实体类Emp、XML文件emp.xml
- 引入资料中提供的静态页面文件,放在resources下地static目录下
- 编写Controller程序,处理请求,响应数据
springboot项目地静态资源(html,css,js等前端资源)默认存放目录为:classpath:/static、classpath:/public、classpath:/resources
分层解耦
三层架构:
- controller:控制层,接收前端发送地请求,对请求进行处理,并响应数据。
- service:业务逻辑曾,处理具体地业务逻辑。
- dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据地增、删、改、查。
分层解耦
内聚:软件中各个功能模块内部地功能联系。
耦合:衡量软件中各个层/模块之间地依赖、关联地程度。
软件设计原则:高内聚低耦合
控制反转:Inversion Of Control,简称IOC。对象地创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
依赖注入:Dependency Injection,简称DI。容器为应用程序提供运行时,所以来地资源,称之为依赖注入。
Bean对象:IOC容器中创、管理的对象,称之为bean。
IOC & DI入门
1.Service层 及 Dao层地实现类,交给IOC容器管理。
2.为Controller及Service注入运行时,依赖地对象。
3.运行测试。
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注入
1.@Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,将会报出如下错误
Field empService in com.itheima.controller.EmpController required a single bean, but 2 were found:
- empServiceA: defined in file [E:\springboot-web-req-resp\target\classes\com\itheima\service\impl\EmpServiceA.class
- empServiceB: defined in file [E:\springboot-web-req-resp\target\classes\com\itheima\service\impl\EmpServiceB.class
Action:
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean
2.通过以下几种方案来解决:
- @Primary
- @Autowired + @Qualifier("bean的名称")
- @Resource(name="bean的名称")
3.@Resource 与 @Autowired区别
- @Autowired是spring框架 提供的注解,而@Resource是JDK提供的注解。
- @Autowired默认是按照类型注入,而@Resource默认是按照名称注入。