包括(SpringBoot,HTTP,Web 服务器,请求,响应,分层解耦)
目录
JavaWeb后端基础知识(1)
一.SpringBoot
1.SpringBogtWeb快速入门
二.HTTP
1.概念:
2.特点:
3. HTTP-请求数据格式
4. 请求响应介绍-HTTP响应格式
5. 请求响应介绍-HTTP响应格式
(1)状态码:
(2)响应头:
三. Web 服务器
1.Web服务器
2. Tomcat
3.起步依赖
4.内嵌Tomcat服务器
四. 请求
1.基础知识
2.原始方式
3.简单参数(会自动进行类型转换,后面几个也一样)
(1)简单参数:
(2)例子:
(3)@RequestParam映射
(4)注意事项
(5)小结
4.实体参数
(1)简单实体对象:
5.数组集合参数
(1)数组参数:
6. 日期参数
(1)日期参数:
7. JSON 参数
(1)JSON参数:
8. 路径参数
(1)路径参数:
五.响应
1.@ResponseBody
2.统一响应结果
3. 解析XML文件
六.分层解耦
1. 三层架构
2.一些重要概念
3. I0C&DI入门
(1)步骤
(2)Bean的声明
(3)Bean组件扫描
(1)创建springboot工程,并勾选web开发相关依赖。
(注意:把Server URL改为start.aliyun.com)
(2)定义HelloController类,添加方法hello,并添加注解。
(3)运行测试
eg:创建请求处理类HelloController,添加请求处理方法 hello,并添加2.注解:
@RestController(标识它是一个请求处理类。)
public class HelloController {
@RequestMapping("/hello")(标明它处理的是那个请求。)
public string hello(){
System.out.println("Hello world ~");
return "Hello world ";
}
}
HTTP :Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
(1)基于TCP协议:面向连接,安全.
(2)基于请求-响应模型的:一次请求对应一次响应
(3)HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
1)缺点:多次请求间不能共享数据。
2)优点:速度快
(1)请求行:请求数据第一行(请求方式、资源路径、协议)
(2)请求头:第二行开始,格式key:value
(3)请求体:POST请求,存放请求参数
1)请求方式-GET:请求参数在请求行中,没有请求体,如:/brand/findA11?name=oppo&status=1。GET请求大小是有限制的。
2)请求方式-POST: 请求参数在请求体中,POST请求大小是没有限制的。
(1)响应行:响应数据第一行(协议、状态码、描述)
(2)响应头:第二行开始,格式key:value
(3)响应体:最后一部分,存放响应数据
1)1xx响应中-临时状态码,表示请求已经接收,告诉客户端应该继续请求或者如果它已经完成则忽略它。
2)2xx成功-表示请求已经被成功接收,处理已完成。
3)3xx重定向-重定向到其他地方;让客户端再发起一次请求以完成整个处理。
4)4xx客户端错误-处理发生错误,责任在客户端。如:请求了不存在的资源、客户端未被授权、禁止访问等。
5)5xx服务器错误-处理发生错误,责任在服务端。如:程序抛出异常等。
6)重点:
·200 OK 客户端请求成功,即处理成功,这是我们最想看到的状态码
·404 Not Found 请求资源不存在,一般是URL输入有误,或者网站资源被删除了。
·500 Internal server Error 服务器发生不可预期的错误 服务器出异常了,赶紧看日志去吧。
1)Content-Type表示该响应内容的类型,例如text/html,application/json。
2)Content-Length表示该响应内容的长度(字节数)。
3)Content-Encoding表示该响应压缩算法,例如gzip。
4)Cache-Control指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒。
5)Set-Cookie告诉浏览器为当前页面所在的域设置cookie。
(1)对HTTP协议操作进行封装,简化web程序开发。
(2)部署web项目,对外提供网上信息浏览服务。
(1)一个轻量级的web服务器,支持servlet、jsp等少量javaEE规范。
(2)也被称为web容器、servlet容器。
(1)spring-boot-starter-web
(2)spring-boot-starter-test
(1)基于Springboot开发的web应用程序,内置了tomcat服务器,当启
动类运行时,会自动启动内嵌的tomcat服务器。
(1)前端控制器:DispatcherServlet
(2)请求(HttpServletRequest):获取请求数据
(3)响应(HttpServletResponse):设置响应数据
(4)BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。
(5)CS架构:Client/Server,客户端/服务器架构模式。(开发、维护麻烦但体验不错)
(1)在原始的web程序中,获取请求参数,需要通过HttpServletRequest 对象手动获取
(2)例子
@RequestMapping("/simpleParam")
public String simpleParam (HttpServletRequest request){
String name =request.getParameter("name");
String ageStr=request.getParameter("age");
int age =integer.parselnt(ageStr);
System.outprintln(name+":"+age);
return "OK";
}(繁琐,基本不用)
参数名与形参变量名相同,定义形参即可接收参数。
@RequestMapping("/simpleParam")
public String simpleParam(String name , integer age){
System.outprintln(name+" : "+age);
return "OK";
}
简单参数:如果方法形参名称与请求参数名称不匹配,可以使用 @RequestParam 完成映射。
如:
@RequestMapping("/simpleParam")
Public String simpleParam(@RequestParam(name = "name")String username , integer age){
System.outprintln(username +" :"+ age);
return "Ok";
}
@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false。如:public String simpleParam(@RequestParam(name = "name", required = false) String username,Integer age)
1)原始方式获取请求参数
1>Controller方法形参中声明HttpServletRequest对象
2>调用对象的getParameter(参数名)
2)SpringBoot中接收简单参数
1>请求参数名与方法形参变量名相同
2>会自动进行类型转换
3)@RequestParam注解
1>方法形参名称与请求参数名称不匹配,通过该注解完成映射
2>该注解的required属性默认是true,代表请求参数必须传递
请求参数名与形参对象属性名相同,定义POI0接收即可
(将请求参数放到一个类里面,到时候直接接收那个类)
eg:public class User {
private String name,
private integer age;
}
@RequestMapping("/simplePojo")
public String simplePojo(User user){
System.outprintln(user);
return "OK";
}
请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数,如果用集合,则用@RequestParam 绑定参数关系
即:
1)数组:请求参数名与形参中数组变量名相同,可以直接使用数组封装
2)集合:请求参数名与形参中集合变量名相同,通过@RequestParam绑定参数关系
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){
System.out.println(Arrays.toString(hobby));
return "ok";
}
@RequestMapping("/listParam")
public String listParam(@RequestParam List
System.outprintln(hobby);
return "OK";
}
使用 @DateTimeFormat 注解完成日期参数格式转换
如:
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern ="yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
System.outprintln(updateTime);
return "OK";
}
JSON数据键名与形参对象属性名相同,定义P010类型形参即可接收参数,需要使用 @RequestBody标识
@RequestMapping(v"/jsonParam")
public string jsonParam(@RequestBody User user){
System.out.println(user);
return "OK";
}
通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用 @PathVariable 获取路径参数
@RequestMapping("/path/{id}/{name}")
public String pathParam2(@PathVariable Integer id, @PathVariable String name){
System.outprintln(id+":" +name);
return "OK";
}
1)类型:方法注解、类注解
2)位置:Controller方法上/类上
3)作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应
4)说明:@RestController = @Controller + @ResponseBody ;
Result(code,msg,data)
如:
public class Result {
//响应码,1代表成功;0 代表失败
private Integer code,
//提示信息
private String msg;
//返回的数据
private Object data;
}
解析XML文件需要引入依赖dom4j
(1)controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据。
(2)service:业务逻辑层,处理具体的业务逻辑。
(3)dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查。
(service和dao一般使用接口)
(1)内聚:软件中各个功能模块内部的功能联系,
(2)耦合:衡量软件中各个层/模块之间的依赖、关联的程度。
(3)软件设计原则:高内聚低耦合
(4)控制反转: Inversion Of control,简称I0C。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
(5)依赖注入: DependencyInjection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
(6)Bean对象:I0C容器中创建、管理的对象,称之为bean。
①Service层 及 Dao层的实现类,交给I0C容器管理。
加上@Component注解即可//将当前类交给TOC容器管理,成为IOC容器中的bean
②为Controller及Service注入运行时,依赖的对象。
加上@Autowired注解即可//运行时,IOC容器会提供该类型的bean对象,并值给该变量
③运行测试。
1)要把某个对象交给I0C容器管理,需要在对应的类上加上如下注解之一:
@Component 声明bean的基础注解 不属于以下三类时,用此注解
@Controller @Component的衍生注解 标注在控制器类上
@Service @Component的衍生注解 标注在业务类上
@Repository @Component的衍生注解 标注在数据访问类上(由于与mybatis整合,用的少)
2)注意事项
①声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。
②使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller。
①前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。
②@Componentscan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 @SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。
也可以手动声明要扫描的包(会取消默认的)@ComponentScan("dao"})(不推荐)
(5)Bean注入
1)@Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,将会报出错误.
2)通过以下几种方案来解决:
①@Primary(想让谁生效,在上面加这个注解)
②@Qualifier
如:@Restcontroller
public class EmpController {
@Autowired
@Qualifier("empserviceA")
private EmpService empservice ;
③@Resource(就不用@Autowired注解了)
如:@RestController
public class Empcontroller {
@Resource(name="empserviceB")
private EmpService empService;
3)@Resource 与 @Autowired区别
@Autowired 是spring框架提供的注解,而@Resource是IDK提供的注解
@Autowired 默认是按照类型注入,而@Resource默认是按照名称注入。