- Tomcat = HTTP服务器 (对接浏览器 ) + Servlet容器(对接web应用)
- 层级关系
- 整体架构
Tomcat的工作:
(1)通过网络读取并解析HTTP请求
(2)判断请求动态 or静态资源
(3)动态资源找到对应 Servlet对象去处理,找不到404静态资源找到路径下对应的文件,找不到404
(4)动态资源,明确HTTP的方法是什么,根据不同的方法,调用doGet / doPost
(5)【web 应用的职责】负责根据请求内容填充响应对象
(6)根据响应对象,组装HTTP响应数据
(7)通过网路把响应发送给浏览器
时序图
- 读取http请求的内容:请求方法、资源路径、请求头
- 发送响应
(1)设置状态码(不修改就是200)resp.setStatus(200)
(2)设置响应头(Content-Type)
resp.setCharacterEncoding(“utf-8”);
resp.setContentType(…); 【text/plain; text/html; text/css; application/javascript;application/json】
(3) 发送正文,通过resp.getWriter()----- 【writer.print(…); writer.printIn(…); writer.printf(…);】 - 获取浏览器(用户)提交的参数
(1)GET方法获取(参数来自于URL的query string 部分)请求方式不同,得到内容不同! ------【?k1=v1&k2=v2&k3=v3】
【动态资源】URL不动,代码不动请求方式不同,得到内容不同!
多组打印,打印出来是数组
通过POST 发送的参数(特质form表单发送)
Content-Type: application/x-www-form-urlencoded- 来自query string
- 请求体
HTTP协议规定的请求的默认编码不是utf-8的,所以通过utf-8发送中文是不对的(乱码)
我们需要在代码中指定请求的字符集编码
//通过req设置请求的字符集编码 req.setCharacterEncoding("utf-8"); //通过resp设置相应的字符集编码 resp.setCharacterEncoding("utf-8");
- 关联数据库 *** 作(用户表)
接口(展示用户列表):< table>
(1)引入jdbc依赖
(2)创建库,表;添加初始数据
html是动态拼接出来的,其中数据来自数据库
(3)使用结构化的方式进行输出,结构化的方式很多,结构化实际上是对象序列化的一种
JSON(Javascript Object Notation)JS对象格式
{ "key1":"value", "key2":"value" } [ "item1","item2" //数组 ] 1 1.0 true false
userList=>JSON
[ { "uid":1, "name":"小A, "age":18 }, { ... }, ... ]
我们没有自己拼接,很容易出错,直接使用Java中的第三方库来完成该工作
GET vs POSTjackson【推荐:Spring 中默认使用的jackson】
gson【来自google】
fast-json【来自阿里】不太推荐,bug比较多
网络的资料中提到:
- GET的参数是通过URL提交(指的就是query string) ; POST的参数是通过请求体提交
不严谨:
(1)假设了一定form表单的提交场景
(2)get的只能放在query string 中,但post既可以在query string 中,也可以在请求体中 - GET能提交的参数有长度限制,POST没有
不严谨:假设了URL的长度有限制(标准中没有规定长度限制,不同浏览器或者web服务器确实有长度限制) - POST 比 GET安全
不严谨: POST的参数放在请求体中,不至于一眼就看到,但通过抓包工具(开发者工具也算)都可以看到,应该用HTTPS才安全
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)