【Java web】HttpServlet
创始人
2024-05-31 06:56:24
0

文章目录

  • 1.缓存机制
  • 2.HTTP协议详解
    • 2.1示例
    • 2.2HTTP请求
      • 2.2.1get请求
      • 2.2.2post请求
    • 2.3HTTP响应
      • 2.3.1get响应
      • 2.3.2 post响应
    • 2.4 get请求和post请求区别
    • 2.5 HttpServlet源码
  • 3.Servlet类开发
    • 3.1设置欢迎页面
    • 3.2关于WEB-INF目录
    • 3.3HttpServletRequest
    • 3.4获取浏览器提交的数据
  • 4.关于请求域对象
    • 4.1 应用域
    • 4.2 请求域
    • 4.3request对象常用方法

1.缓存机制

常见的缓存机制

  • 堆内存中的字符串常量池
    例如:"hello"先在字符串常量池中看有没有,如果有,直接拿来使用,没有则新建,然后放入到字符串常量池中。
  • 堆内存中的整数型常量池
    [-128-127]先放入到整型数字常量池中,如果没有超出这个范围,直接取。
  • 连接池
    (1)java语言连接数据库的连接对象,java.sql.Connection对象。
    (2)JVM是一个进程程,MySql是一个进程,进程与进程之间建立连接,打开通道麻烦,所以我们先创建好N个Connection对象,放进连接池,每一次用户连接的时候,不需要重新创建对象,只需要从连接池中拿来即可。
  • 线程池
    (1)Tomcat服务器支持多线程
    (2)Tomcat服务器在启动的时候,先创建N个线程,放入到线程池中,然后等待用户发起请求的时候,需要一个线程来处理这个请求,直接从线程池中拿,效率大大提高。
  • redis
    NoSQL数据库,非关系型数据库,缓存数据库。
  • 向ServletContext存数据,等同于将数据放到缓存Cache中。

2.HTTP协议详解

2.1示例

GetServlet

package com.sdnu.javaweb.servlet;import jakarta.servlet.GenericServlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;import java.io.IOException;
import java.io.PrintWriter;/*** getServlet** @author Beyong* @date 2023/03/08 11:48**/
public class GetServlet extends GenericServlet {@Overridepublic void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.print("");out.print("    ");out.print("        from get servlet");out.print("    ");out.print("    ");out.print("        

from get servlet

");out.print(" ");out.print("");} }

PostServlet

package com.sdnu.javaweb.servlet;import jakarta.servlet.GenericServlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;import java.io.IOException;
import java.io.PrintWriter;/*** postServlet** @author Beyong* @date 2023/03/08 11:48**/
public class PostServlet extends GenericServlet {@Overridepublic void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.print("");out.print("    ");out.print("        from post servlet");out.print("    ");out.print("    ");out.print("        

from post servlet

");out.print(" ");out.print("");} }

index.html



http协议


get请求:

username
password

post请求:

username
password

web.xml


getServletcom.sdnu.javaweb.servlet.GetServletgetServlet/servlet05/getServletpostServletcom.sdnu.javaweb.servlet.PostServletpostServlet/servlet05/postServlet

2.2HTTP请求

  • 请求行
    请求行包含 请求方式,URL,HTTP协议版本号
    请求方式包括 get,post,delete,put,head,options,trace
    URI 资源标识符
    HTTP协议版本号
  • 请求头
    请求的主机,主机的端口号, 浏览器信息, 平台信息, cookie等信息
  • 空白行
    空白行用来区分“请求头”和“请求头”
  • 请求体
    要发送的具体数据

2.2.1get请求

GET /servlet5/getServlet?username=jack&password=123 HTTP/1.1   【请求行】
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Cookie: csrftoken=9WQujKoZ8gtaONV4qaIcwmtuWQUQKspvN5f7CfE7QVVwCJ86yOLdQukhUgTxHEUT; sessionid=uatzbrs3f6yr22vwbldot76m0pqvjc78
Host: 127.0.0.1:8080     【请求头】
Referer: http://127.0.0.1:8080/servlet5/index.html
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"【空白行】
【请求体】

2.2.2post请求

POST /servlet5/postServlet HTTP/1.1  【请求行】
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Content-Length: 26
Content-Type: application/x-www-form-urlencoded
Cookie: csrftoken=9WQujKoZ8gtaONV4qaIcwmtuWQUQKspvN5f7CfE7QVVwCJ86yOLdQukhUgTxHEUT; sessionid=uatzbrs3f6yr22vwbldot76m0pqvjc78
Host: 127.0.0.1:8080   【请求头】
Origin: http://127.0.0.1:8080
Referer: http://127.0.0.1:8080/servlet5/index.html
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
【空白行】
【请求体】

2.3HTTP响应

  • 状态行
    (1)协议版本号
    (2)状态码
    200表示请求响应成功
    404表示访问的资源不存在
    405表示前端发送请求的方式和后端处理请求的方式不同
    500表示服务端程序出现错误
    (3)状态的描述信息
    ok表示成功
    no found表示资源找不到

  • 响应头
    响应的内容类型,长度,时间…

  • 空白行
    用来分隔响应头和响应体

  • 响应体
    响应的正文,这些正文最终被浏览器渲染,解释并执行,最终展示出效果。

2.3.1get响应

具体报文

HTTP/1.1 200 ok									【状态行】
Content-Type: text/html;charset=UTF-8		    【响应头】
Content-Length: 141
Date: Wed, 08 Mar 2023 06:11:54 GMT
Keep-Alive: timeout=20
Connection: keep-alive【空白行】
    					    【响应体】        from get servlet               

from get servlet

2.3.2 post响应

HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Content-Length: 143
Date: Wed, 08 Mar 2023 08:59:58 GMT
Keep-Alive: timeout=20
Connection: keep-alive

2.4 get请求和post请求区别

目前只有form表单中method="POST"属于post请求。

(1) get请求是在请求行发送数据,发送的时候,在URI的的地址栏后面挂上?和数据。
(2) post请求是在请求体发送数据,不会显示在地址栏上。
(3)不管是get请求还是post请求,请求的数据格式都是一样的。
(4)get请求只能发送普通字符串,并且普通字符串长度有限制,post请求可以发送任何类型的数据,理论上没有长度限制。
(5)get请求适合从服务器获取数据,post请求适合向服务器发送数据。
(6)get请求是安全的,post请求是危险的,因为post是向服务器发送数据的,如果这些数据从后门进入服务器,服务器是很危险的。
(7)get请求支持缓存,你只要发送了get请求,浏览器都会先在本地浏览器上找,找不到再去服务器上取。
post请求不支持缓存。post请求后,响应的结果不会被浏览器存储起来。
(8)大部分form表单的提交使用post请求。文件上传,一定使用post。其它情况使用get请求。

2.5 HttpServlet源码

(1)servlet规范中的接口:
在这里插入图片描述
(2)HttpServlet哪个包下
jakarta.servlet.http.HttpServlet

(3)http包下有哪些类和接口
在这里插入图片描述
(4)HttpServletRequest
在这里插入图片描述
(5)HttpServletResponse
HttpServletResponse对象是专门用来响应到浏览器的。

3.Servlet类开发

步骤:
(1)继承HttpServlet。
(2)重写doGet方法或者doPost方法。
(3)将Servlet类配置到web.xml文件中。
(4)准备前端页面,form表单指定路径即可。

3.1设置欢迎页面

    login.html

这个路径不需要"/"开始,并且这个路径默认是从webapp的根下开始查找。

启动浏览器,输入:
http://127.0.0.1:8080/servlet07/

在这里插入图片描述

3.2关于WEB-INF目录

在WEB-INF目录下的资源是受保护的,在浏览器上不能够直接访问。

3.3HttpServletRequest

  • HttpServletRequest是Tomcat服务器创建的,实际上,当用户发送请求的时候,遵循了HTTP协议,发送的是HTTP的请求协议,Tomcat服务器将HTTP协议中的信息以及数据全部解析出来,然后Tomcat服务器将这些信息封装到HttpServletRequest对象当中,传给我们javaweb程序员。
    javaweb程序员面向HttpServletRequest接口编程,调用方法就可以获得请求信息。

  • response对象和request对象只在当前请求中有效。

3.4获取浏览器提交的数据

在这里插入图片描述

4.关于请求域对象

4.1 应用域

  • 应用域对象是ServletContext对象
  • 实际上向应用域存数据,就相当于将数据存储到缓存中,用户需要的时候,直接从缓存中取出,大大提高了效率。
  • ServletContext中操作域的方法
    在这里插入图片描述

4.2 请求域

  • 请求域比应用域范围小,生命周期短。请求域只在一次请求中有效。
  • 请求域中的操作方法
    在这里插入图片描述

4.3request对象常用方法

  • 跳转
    在这里插入图片描述
  • request对象中的两个方法
    在这里插入图片描述
  • HttpServletRequest方法
    在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...