Java教程

Servlset进阶

本文主要是介绍Servlset进阶,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Servlet运行的基本原理

  1. Tomcat = HTTP服务器 (对接浏览器 ) + Servlet容器(对接web应用)
  2. 层级关系
    在这里插入图片描述
  3. 整体架构
    在这里插入图片描述Tomcat的工作:
    (1)通过网络读取并解析HTTP请求
    (2)判断请求动态 or静态资源
    (3)动态资源找到对应 Servlet对象去处理,找不到404静态资源找到路径下对应的文件,找不到404
    (4)动态资源,明确HTTP的方法是什么,根据不同的方法,调用doGet / doPost
    (5)【web 应用的职责】负责根据请求内容填充响应对象
    (6)根据响应对象,组装HTTP响应数据
    (7)通过网路把响应发送给浏览器
    时序图
    在这里插入图片描述

Servlet的使用

  1. 读取http请求的内容:请求方法、资源路径、请求头
  2. 发送响应
    (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(…);】
  3. 获取浏览器(用户)提交的参数
    (1)GET方法获取(参数来自于URL的query string 部分)请求方式不同,得到内容不同! ------【?k1=v1&k2=v2&k3=v3】
    在这里插入图片描述
    【动态资源】URL不动,代码不动请求方式不同,得到内容不同!
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述多组打印,打印出来是数组
    在这里插入图片描述
    在这里插入图片描述
    通过POST 发送的参数(特质form表单发送)
    Content-Type: application/x-www-form-urlencoded
    1. 来自query string
    2. 请求体
      在这里插入图片描述
      HTTP协议规定的请求的默认编码不是utf-8的,所以通过utf-8发送中文是不对的(乱码)
      我们需要在代码中指定请求的字符集编码
        //通过req设置请求的字符集编码
        req.setCharacterEncoding("utf-8");
        //通过resp设置相应的字符集编码
        resp.setCharacterEncoding("utf-8");
  1. 关联数据库操作(用户表)
    接口(展示用户列表):< 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中的第三方库来完成该工作

jackson【推荐:Spring 中默认使用的jackson】
gson【来自google】
fast-json【来自阿里】不太推荐,bug比较多

GET vs POST

网络的资料中提到:

  1. GET的参数是通过URL提交(指的就是query string) ; POST的参数是通过请求体提交
    不严谨:
    (1)假设了一定form表单的提交场景
    (2)get的只能放在query string 中,但post既可以在query string 中,也可以在请求体中
  2. GET能提交的参数有长度限制,POST没有
    不严谨:假设了URL的长度有限制(标准中没有规定长度限制,不同浏览器或者web服务器确实有长度限制)
  3. POST 比 GET安全
    不严谨: POST的参数放在请求体中,不至于一眼就看到,但通过抓包工具(开发者工具也算)都可以看到,应该用HTTPS才安全
这篇关于Servlset进阶的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!