Web入门
- HTTP协议
- HTTP
- 请求数据的格式
- 响应数据的格式
- Web服务器
- 前言
- 创建和部署项目
- IDEA中使用Tomcat
- 请求响应
- 请求
- 响应
HTTP协议
HTTP
超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
简单来说,HTTP协议是浏览器和服务器之间建立好的约定,是数据传输的规则和格式,包括请求数据的格式和响应数据的格式。
HTTP协议特点:
1.基于TCP协议:面向连接,安全
2.基于请求-响应模型的:一次请求对应一次响应
3.HTTP请求是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的
- 缺点:多次请求不能共享数据。Java中会采用会话技术(Cookie、Session)来解决这个问题。
- 优点:速度快。
请求数据的格式
请求数据分为3部分:
1.请求行:请求数据的第一行。其中GET表示请求方式,/ 表示请求资源路径,HTTP/1.1表示协议版本。
2.请求头:第二行开始,格式为key : value形式。
常见HTTP请求头:
- Host:表示请求的主机名
- User-Agent:浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 … Chrome/79,IE浏览器的标识类似于Mozilla/5.0(Windows NT … )like Gecko;
- Accept:表示浏览器能接收的资源类型。
- Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页。
- Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip、deflate等。
3.请求体:POST请求(特有)的最后一部分,存放请求参数。
GET请求和POST请求的区别:
1.GET请求的请求参数在请求行中,没有请求体,POST请求的请求参数在请求体中。
2.GET请求的请求参数大小有限制,POST没有。
响应数据的格式
响应数据分为3部分:
1.响应行:响应数据的第一行。其中HTTP/1.1表示协议版本,200表示响应状态码,OK表示状态码描述。
2.响应头:第二行开始,格式为key: value形式。
常见的HTTP响应头:
- Content-Type:表示该响应内容的类型,例如text/html,image/jpeg;
- Content-Length:表示该响应内容的长度(字节数);
- Content-Encoding:表示该响应压缩算法,例如gzip;
- Cache-Control:指示客户端应如何缓存,例如max-age=300,表示可以最多缓存300秒。
3.响应体:最后一部分,存放响应数据。
状态码详解
Web服务器
前言
Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让web开发更加便捷。Web服务器的作用:
- 封装HTTP协议操作,简化开发。
- 可以将web项目部署到服务器中,对外提供网上浏览服务。
Tomcat是一个免费开源的轻量级Web服务器,支持Servlet/JSP少量JaveEE规范,Tomcat也称为Web容器、Servlet容器,Servlet需要依赖于Tomcat才能运行。
创建和部署项目
使用org.apache.maven.archetypes:maven-archetype-webapp
archetype创建Maven项目即可创建出相应的webapp目录,但是Maven项目的Java文件和resources文件需要手动添加:
然后将项目放置到/Tomcat/webapps
目录下,即可部署完成。
一般JavaWeb项目会被打成war包,然后将war包放到webapps目录下,Tomcat会自动解压缩war文件。
IDEA中使用Tomcat
当我们在编写JaveWeb项目时,每写一点代码就要测试一下,所以每次就需要将项目打包然后放在Tomcat的webapps目录下,这个过程非常的麻烦。
(一)集成本地Tomcat
IDEA界面右上角Edit Configurations… --> Add New Configuration --> Tomcat Server --> Local --> Application Server --> Configure -->选择Tomcat的文件路径 --> Apply --> OK
(二)使用Tomcat Maven插件
在pom.xml页面右键generate,选择plugin template,然后添加以下代码:
<plugins><!--tomcat的插件--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port> <!--访问端口号--><path>/</path> <!--项目访问路径--></configuration></plugin>
</plugins>
请求响应
请求
简单参数
1.参数名与形参变量名相同,定义形参即可接收参数。
@RequestMapping("/simpleParam")
public String simpleParam(String name, Integer age){System.out.println(name+" "+age);return "OK";
}
2.方法形参名称与请求参数名称不匹配,可以使用@RequestParam
完成映射
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam(name='name')String username, Integer age){System.out.println(username+" "+age);return "OK";
}
该注解的required属性默认是true,代表请求参数必须传递。
实体参数
1.简单实体对象:请求参数名与形参对象属性名相同,定义POJO接收即可。
@RequestMapping("simplePojo")
public String simplePojo(User user){System.out.println(user);return "OK";
}
2.复杂实体对象:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数。
@RequestMapping("complexPojo")
public String complexPojo(User user){System.out.println(user);return "OK";
}
数组集合参数
1.数组参数:请求参数名与形参中数组变量名相同,可以直接使用数组封装。
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){System.out.println(Arrays.toString(hobby));return "OK";
}
2.集合参数:请求参数名与形参中集合变量名相同,通过@RequestParam绑定参数关系。
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby){System.out.println(hobby);return "OK";
}
日期参数
使用@DateTimeFormat
注解完成日期参数格式转换。
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updatetime){System.out.println(updatetime);return "OK";
}
json参数
json数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要@RequestBody
标识。
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){System.out.println(user);return "OK";
}
路径参数
通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用@PathVariable
获取路径参数。
@RequestMapping("/pathParam/{id}/{name}")
public String pathParam(@PathVariable Integer id, @PathVariable String name){System.out.println(id);System.out.println(name);return "OK";
}
响应
1.@ResponseBody
位置:Controller类上/方法上
作用:将方法返回值直接响应,若返回值类型是实体对象/集合,转JSON格式响应。
2.统一响应结果
Result(code,msg,data)