maven:
maven 依赖范围:
依赖的 jar 包,默认情况下,可以在任何地方使用。可以通过
作用范围:
- 主程序范围有效 (main 文件夹范围内)
- 测试程序范围有效 (test 文件夹范围内)
- 是否参加打包运行 (package 指令范围内)
scope 值 | 主程序 | 测试程序 | 打包 (运行) | 范例 |
---|---|---|---|---|
compile (默认) | Y | Y | Y | log4j |
test | – | Y | – | junit |
provided | Y | Y | – | servlet-api |
runtime | – | Y | Y | jdbc 驱动 |
生命周期:
maven 的生命周期是为了对所有的 maven 项目构建过程进行抽象和统一
maven 中有 3 套相互独立的生命周期:
- clean:清理工作
- default:核心工作,如:编译、测试、打包、安装、部署等
- site:生成报告、发布站点等
注意:在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行
生命周期阶段:
- clean:移除上一次构建生成的文件
- compile:编译项目源代码
- test:使用合适的单元测试框架运行测试 (junit)
- package:将编译后的文件打包,如:jar、war 等
- install:安装项目到本地仓库
HTTP:
概念:
超文本链接协议,规定了浏览器和服务器之间数据传输的规则
特点:
- 基于 TCP 协议:面向连接,安全
- 基于请求 - 响应模型 的:一次请求对应一次响应
- HTTP 协议是无状态的协议:对于事务处理没有记忆能力。每次请求 - 响应 都是独立的
缺点:多次请求间不能共享数据
优点:速度快
HTTP 请求数据格式:
- 请求行:请求数据第一行 (请求方式、资源路径、协议)
- 请求头:第二行开始,格式 key:value
1、Host:请求的主机名
2、User-Agent:浏览器版本,例如 Chrome 浏览器的表示类似 Mozilla/5.0…Chrome/79,
IE 浏览器的标识类似 Mozilla/5.0 (windowsNT…) like Gecko
3、Accept:表示浏览器能接收的资源类型,如 text/,image/ 或者 / 表示所有
4、Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页
5、Accept-Encoding:表示浏览器可以支持的压缩类型,例如:gzip,deflate 等
6、Content-Type:请求主体的数据类型
7、Content-Length:请求主体的大小 (单位:字节)
- 请求体:POST 请求,存放请求参数。跟请求头有一个空行隔开
请求方式 - GET:请求参数在请求行中,没有请求体,如:/brand/findAll?name=OPPO&status=1
请求方式 - POST:请求参数在请求体中,POST 请求大小是没有限制的
HTTP 相应格式:
- 响应行:响应数据第一行 (协议、状态码、描述)
- 响应头:第二行开始,格式 key-value
- 响应体:最后一部分,存放响应数据。跟响应头有一个空行隔开
- 1XX:响应中 - 临时状态码,表示请求已经接受,告诉客户端应该继续请求,或者 如果它已经完成则忽略它
- 2XX:成功 - 表示请求已经被成功接收,处理已完成
- 3XX:重定向 - 重定向到其他地方;让客户端再发起一次请求以完成整个处理
- 4XX:客户端错误 - 处理发生错误,责任在客户端。如:请求了不存在的资源、客户端未被授权、禁止访问等
- 5XX:服务器错误 - 处理发生错误,责任在服务端。如:程序抛出异常等
-
200:客户端请求成功,即处理成功
- 404:请求资源不存在,一般是 URL 输入有误,或者网站资源被删除了
- 500:服务器发生不可预期的错误,服务器出异常了,要查看日志
Content-Type:表示该相应内容的类型,例如 text/html,applicantion/json
Content-Length:表示该 i 相应内容的长度 (字节数)
Conten-Encoding:表示该响应压缩算法,例如 gzip
Cache-Control:指示客户端应如何缓存,例如 max-age=300 表示可以最多缓存 300 秒
Set-Cookie:告诉浏览器未当前页面所在的域设置 cookie
Web 服务器:
Web 服务器是一个软件程序,对 HTTP 协议的操作进行封装,简化 web 程序开发,使得程序员不必直接对协议进行操作,让 Web 开发更加便捷,主要功能是” 部署 web 项目,对外提供网上信息浏览服务”
Tomcat:
一个轻量级的 web 服务器,支持 servlet、jsp 等少量 javaEE 规范。也被称为 web 容器、servlet 容器
目录:
bin:可执行文件
conf:配置文件
lib:Tomcat 依赖的 jar 包
logs:日志文件
temp:临时文件
webapps:应用发布目录
work:工作目录
启动:双击 bin\startup.bat
控制台中文乱码:修改 conf/logging.properties
java.util.logging.ConsoleHandler.level = FINE java.util.logging.ConsoleHandler.formatter = org.apache.juli.OnewLineFormatter java.util.logging.ConsoleHandler.encoding = UTF-8 –> 改为 = GBK
关闭:
- 直接关掉运行窗口:强制关闭
- bin\shutdown.bat: 正常关闭
- Ctrl+C:正常关闭
常见问题:
- 启动窗口一闪而过:检查 JAVA_HOME 环境变量是否正确配置
- 端口号冲突:找到对应程序,将其关闭掉,或者修改 Tomcat 端口号 (conf/serve.xml)
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectProt="8843" />
注意:
HTTP 协议默认端口号为 80,如果将 Tomcat 端口号改为 80,则将来访问 Tomcat 时,将不用输入端口号
Tomcat 部署项目:
将项目放置到 webapps 目录下,即部署完成
请求响应:
请求 (HttpServletRequest):获取请求数据
响应 (HttpServletResponse):设置响应数据
BS 架构:Browser/Server,浏览器 / 服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端 (维护方便,体验一般)
CS 架构:Client/Server,客户端 / 服务器架构模式 (如微信,百度网盘) (开发、维护麻烦,体验不错)
请求简单参数:
(了解) 原始方式:
在原始的 web 程序中,获取请求参数,需要通过 HttpServletRequest 对象手动获取
@RequeutMapping("/simpleParam") public String simpleParam(HttpServletRequest request){ String name = request.getParameter("name"); String ageStr = request.getParameter("age"); int age = Integer.parseInt(ageStr); System.out.print(name + ":" + age); return "OK"; }
SpringBoot 方式:
简单参数:
参数名与形参变量名相同,定义形参即可接收参数
@RequeutMapping("/simpleParam") public String simpleParam(String name,Integer age){ System.out.print(name + ":" + age); return "OK"; }
如果参数名对应不上,使用 @RequestParam 注解完成映射
@RequeutMapping("/simpleParam") public String simpleParam(@RequestParam(name = "name")String username,Integer age){ System.out.print(name + ":" + age); return "OK"; } @RequestParam 中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。 如果该参数是可选的,可以将required属性设置为false: @RequestParam(name = "name",required = false)String username
简单实体对象:
请求参数名与形参对象属性名相同,定义 POJO 接受即可
@RequeutMapping("/simplePojo") public String simplePojo(User user){ System.out.print(user); return "OK"; } public class User{ private String name; private Integer age; private Address address; } public class Address{ private String province; private String city; } ------------------------------------------------- URL:localhost:8080/complexPojo?name=Tom&age=10&address.province&address.city=beijing