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