软件设计之JavaWeb(2)

news2024/9/26 3:28:37

软件设计之JavaWeb(2)

此篇应在MySQL之后进行学习:
路线图推荐:
【Java学习路线-极速版】【Java架构师技术图谱】
尚硅谷全新JavaWeb教程,企业主流javaweb技术栈
资料可以去尚硅谷官网免费领取
此章节最好学完JDBC观看

学习内容:

  1. HTTP简介
  2. Servlet

1、HTTP简介

交互的方式:
请求:永远都是客户端向服务端发送
响应:永远都是服务端向客户端返回

在这里插入图片描述

http、tcp、ip

HTTP、TCP、IP是网络通信中不同层次的协议,它们构成了从高层应用到低层网络传输的完整协议栈。
HTTP协议:应用层,HTTP协议是在TCP协议之上运行的应用层协议,专门用于在客户端(如浏览器)和服务器之间传输网页数据(HTML、CSS、JS等)。HTTP规定了客户端和服务器之间如何请求和响应数据。 HTTP是无状态的,每次请求都是独立的,无法保存连接状态(可以通过Cookies或Session等技术保持状态)。
TCP协议:传输层, TCP协议在IP协议之上,提供可靠的、面向连接的传输服务。它确保数据按顺序到达,并且没有丢失或重复。TCP通过建立连接(握手)、确认数据包、重传丢失的数据包等机制,实现了可靠的传输。TCP是面向连接的、可靠的传输协议,提供数据流的完整性和顺序性。
IP协议: 网络层,IP协议负责将数据包从一台设备传输到另一台设备,它处理数据的路由和寻址问题。IP协议根据目标IP地址,将数据包在不同网络之间进行传输。IP是无连接的,主要负责数据包的传输,不保证数据包的可靠送达或顺序(这由上层协议处理)。

HTTP长链接与短连接

HTTP长链接,也称为持久连接,是在HTTP/1.1协议中引入的一种连接方式。它允许在一个TCP连接中发送和接收多个HTTP请求和响应,而不需要为每个请求都建立一个新的连接。使用长链接的好处是减少了频繁建立和断开连接的开销,节省了网络资源和时间,从而提高了传输效率。
HTTP短链接,也称为非持久连接,是在HTTP/1.0协议中常用的一种连接方式。在短链接中,每次HTTP请求都会建立一个新的TCP连接,服务器处理完请求并返回响应后,立即关闭连接。这种方式简单易实现,但每次请求都需要重新建立连接,带来一定的开销。

请求报文

客户端发给服务端的报文
1、请求行包括:请求方法、请求URL、HTTP版本
请求方法:表示客户端希望服务器执行的操作,例如 GET、POST、PUT、DELETE 等。
请求URI:请求的资源路径,例如 /index.html 或 /api/v1/users
HTTP版本:请求使用的HTTP版本,例如 HTTP/1.1。
2、请求头:包含了请求的附加信息,如 Host(目标主机名)、User-Agent(客户端软件)、Accept(接受的数据类型)等。
请求体:在某些请求方法(如 POST、PUT)中,包含了要发送给服务器的数据。例如,表单数据或JSON数据
在这里插入图片描述

响应报文

响应报文是服务器向客户端返回的消息,表示服务器对客户端请求的处理结果。
状态行包括:HTTP版本、状态码、状态描述
状态码:表示请求处理结果的三位数代码,例如 200(成功)、404(未找到)、500(服务器内部错误)等。
状态描述:对状态码的简短描述,例如 OK、Not Found、Internal Server Error。
响应头:包含了响应的附加信息,如 Content-Type(返回数据的类型)、Content-Length(返回数据的长度)、Set-Cookie(设置的Cookie)等。
响应体:包含了服务器返回给客户端的数据,例如网页内容、图像、JSON数据等。

在这里插入图片描述

Servlet

动态资源与静态资源

静态资源是指内容固定、不需要服务器端处理、直接由服务器发送给客户端的文件。这类资源通常包括HTML文件、CSS文件、JavaScript文件、图像文件等
动态资源是指在服务器端生成并且会随着用户的请求而动态变化的内容。通常,这类资源在每次请求时都会经过服务器端逻辑处理,然后生成返回给客户端的内容。动态资源通常由诸如Servlet、JSP(JavaServer Pages)或其他基于Java的服务器端框架(如Spring MVC、Struts等)生成。

Servlet简介

1、 Servlet 是 Java 技术中用于开发动态 Web 应用程序的一种服务器端组件。它能够接收客户端(通常是浏览器)的请求、处理请求,并生成动态响应(如 HTML 页面、JSON 数据等),然后将响应发送回客户端。从代码层面,Servlet是一个接口
2、 Tomcat 是一个流行的开源 Servlet 容器(也称为应用服务器),用于运行 Java Web 应用程序。Servlet 是用来处理客户端请求和生成动态响应的服务器端组件,而 Tomcat 是执行和管理这些 Servlet 的平台。
3、 当客户端(如浏览器)向服务器发送 HTTP 请求时,Tomcat 作为 Servlet 容器,会解析请求并将其传递给相应的 Servlet 进行处理。Servlet 通过HttpServletRequestHttpServletResponse对象与客户端进行交互,处理请求并生成响应。

Servlet开发流程

项目:通过客户端向一个Servlet发送请求,携带username,如果用户名是’atguigu’则向客户端响应NO,其他响应YES
1、创建JavaWeb项目:在项目创建新模块->项目结构依赖项添加Tomcat->添加Webapplication框架支持(顺带回顾一下前文)
2、重写service方法 service(HttpServletRequest req, HttpServletResponse resp)
3、在service方法中,定义业务处理代码
4、在web.xml中,配置Servlet对应的请求映射路径

代码部分

创建UserServlet对象继承HttpServlet(该对象实现了Servlet接口)
public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1 从req对象中获取请求中的任何信息(username)
        //根据参数名获取参数值
        String username = req.getParameter("username");
        //2 处理业务的代码
        String info = "YES";
        if ("atguigu".equals(username)){
            info = "NO";
        }
        //3 将要响应的数据放入resp
        //该方法返回的是一个向响应体中打印字符串的打印流
        PrintWriter writer = resp.getWriter();
        writer.write(info);
    }
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--method 属性定义了表单提交时所使用的HTTP方法-->
<!--action 属性在 HTML 表单中用于指定表单数据提交时的目标 URL,也就是服务器接收和处理表单数据的地址-->

<form method="get" action="userCheck">
    用户名:<input type="text" name="username"> </br>
<!--  value 属性定义了 <input> 元素的初始值或显示文本-->
    <input type="submit" value="校验">
</form>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0">


<!--
1 配置Servlet类,并起一个别名
    servlet-class 告诉Tomcat要实例化的Servlet类
    servlet-name 用于关联请求的映射路径
-->
    <servlet>
        <servlet-name>userServlet</servlet-name>
        <servlet-class>com.atguigu.servlet.UserServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>userServlet</servlet-name>
<!--        设置路径名称-->
        <url-pattern>/userCheck</url-pattern>
    </servlet-mapping>
</web-app>

url-pattern

1、一个Servlet路径可以对应多个url-pattern
2、一个Servlet标签可以对应多个servlet-mapping标签
3、url-pattern除了精确匹配,还能模糊匹配
模糊匹配:
/ 匹配全部,不包含jsp文件
/* 匹配全部,包含jsp文件
/a/* 匹配前缀,后缀模糊。只要前面是/a/开头,就匹配上
*.action 匹配后缀,前缀模糊

注解方式配置Servlet

在web.xml内配置servlet类相对比较麻烦
1、在Servlet类前加上:@WebServlet("路径名称")

Servlet生命周期

不建议在service方法中修改成员变量,在并发请求时会引发线程安全问题
1、加载与实例化:当Servlet容器(如Tomcat)启动时,或者当第一次请求该Servlet时,容器会加载Servlet类并创建一个实例。默认情况下,Servlet实例是在第一次收到请求时才加载的。
2、初始化:加载Servlet后,容器会调用init()方法对Servlet进行初始化。在这个阶段,Servlet可以读取配置参数,进行必要的资源初始化。init()方法只会被调用一次,在Servlet的整个生命周期中不会重复调用。
3、请求处理:对每一个客户端请求,Servlet容器会创建一个新的线程并调用Servlet的service()方法。service()方法会根据HTTP请求的类型(GET、POST等)来调用相应的处理方法
4、销毁:当Servlet容器决定卸载Servlet或停止容器时,容器会调用destroy()方法来清理资源,如关闭数据库连接等。destroy()方法也只会被调用一次。
5、defaultServlet 是Servlet容器提供的一个默认Servlet,用于处理静态资源的请求,如HTML页面、图片、CSS文件等。在Tomcat中,defaultServlet负责处理对静态资源的访问。如果一个URL请求没有被任何用户定义的Servlet匹配到,容器就会把这个请求交给defaultServlet处理
6、 load-on-startup 是一个Servlet配置元素,用于指定Servlet的加载时机。默认情况下,Servlet是延迟加载的,即只有在收到第一次请求时才会加载。如果希望在容器启动时就加载Servlet,可以在web.xml中通过load-on-startup元素配置
具体而言: load-on-startup 的值是一个整数。正数值表示容器启动时会预加载Servlet,数字越小优先级越高。负数或不指定时,Servlet会按需加载(即延迟加载)

Servlet继承结构

Servlet接口

1、init(ServletConfig config):这个方法用于在Servlet被创建后初始化它。ServletConfig对象包含Servlet的配置信息,包括初始化参数和ServletContext。这个方法只会在Servlet的整个生命周期中调用一次。
2、service(ServletRequest req, ServletResponse res):service()方法是Servlet中最重要的方法,它负责处理每个客户端请求。Servlet容器会为每个请求调用service(),传递ServletRequest和ServletResponse对象。
3、destroy():该方法在Servlet被销毁前调用,用于释放Servlet占用的资源,例如关闭数据库连接、清理缓存等。这个方法也只会被调用一次。
4、getServletConfig():该方法返回一个ServletConfig对象,包含Servlet的配置信息。在init()方法中,ServletConfig对象被传递给Servlet,之后可以通过这个方法再次获取
5、getServletInfo():该方法返回Servlet的描述信息,通常用于描述Servlet的功能或版本。这是一个可选的方法,通常用于调试或文档目的。

GenericServlet抽象类

1、GenericServlet 是一个通用的 Servlet 基类,可以处理非 HTTP 请求,适合用于需要更多灵活性和不特定于某种协议的应用。
2、它实现了 Servlet 接口,并提供了对部分方法的默认实现,简化了开发者的工作。比如,init() 和 destroy() 方法可以根据需要重写,而不是必须实现所有的 Servlet 接口方法。
3、作为一个抽象类,GenericServlet 强制子类必须实现 service() 方法,用来处理请求和响应。这个方法接受 ServletRequest 和 ServletResponse 作为参数。

HttpServlet抽象类

1、HttpServlet 类继承自 GenericServlet,并提供了专门用于处理 HTTP 协议的功能。
2、HttpServlet 提供了封装好的 service() 方法,能够自动识别请求类型(如 GET、POST 等),并将其委托给相应的 doXxx() 方法(如 doGet()、doPost() 等),开发者只需要重写与业务相关的特定方法。
3、继承HttpServlet后,要么重写service方法,要么重写 doGet/doPost等方法

ServletConfig的使用

1、 ServletConfig 是 Java 中用于在 Servlet 中获取配置参数的接口,它允许开发者通过 web.xml 或注解为每个 Servlet 配置特定的初始化参数。
2、功能1:获取初始化参数,ServletConfig 提供了获取在 web.xml 文件中为特定 Servlet 定义的初始化参数的方法。
3、功能2:获取 ServletContext,通过 ServletConfig 对象可以访问 ServletContext,它代表整个 web 应用的上下文环境。

ServletContext

1、 ServletContext 是 Java 中用于在整个 Web 应用程序范围内共享信息的接口。它提供了一种与 Web 容器进行交互的机制,可以在多个 Servlet 之间共享数据、资源、以及访问应用的初始化参数等。
2、共享数据:在整个应用范围内共享属性信息,所有的 Servlet 和 JSP 页面都可以访问这些信息。
3、获取 Web 应用的初始化参数:可以从 web.xml 文件中获取全局的初始化参数。
4、getRealPath(String path) 是 ServletContext 中的一个方法,它用于将一个相对路径转换为服务器文件系统上的绝对路径。这意味着你可以使用该方法获取 Web 应用程序中的资源在服务器上的物理位置。
5、 getContextPath()方法用于获取当前 Web 应用的上下文路径,可以避免在代码中硬编码 URL 路径,从而提高应用的可移植性。例如,当应用的上下文路径在不同服务器或部署环境中有所变化时,代码不需要手动更新路径。
6、域对象是指在 Java Web 开发中,用于保存和共享数据的对象。域对象与 Web 应用程序的不同作用域(scope)相对应,它们可以在特定的范围内用于存储和共享信息。
其中getAttribute(String name)setAttribute(String name, Object object) removeAttribute(String name) 方法在 Java Web 开发中几乎所有的域对象中都有使用。这些方法用于管理数据在不同作用域内的存储、获取和删除。

URI 和 URL 的区别

URI统一资源标识符是用于标识某个资源的字符串,可以包括以下两部分:资源的名称(如路径)、可选的定位部分(如 URL 中的协议)
URL统一资源定位符是 URI 的一种特殊形式,不仅标识资源,还提供了如何定位该资源的信息。通常包括:协议(如 http 或 https)、主机名或 IP 地址、端口号(可选)、资源路径
总结:URI 用于标识一个资源;URL 是 URI 的一种,用于标识并定位资源。

HttpServletRequest

HttpServletRequest 是 Java Servlet 中用于表示客户端发出的 HTTP 请求的接口。它继承自 ServletRequest,并提供了专门用于处理 HTTP 请求的方法。开发者可以通过该接口获取请求头、请求参数、请求体等信息,以便处理客户端请求。

HttpServletResponse

HttpServletResponse 是 Java Servlet API 中用于表示服务器响应客户端请求的接口。它允许服务器向客户端(通常是浏览器)发送各种类型的响应数据,包括文本、HTML、文件、JSON 等。通过 HttpServletResponse,开发者可以控制响应状态码、响应头、响应内容等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2125952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Learning to Prompt for Vision-Language Models》CoOp论文中文校对版

系列论文研读目录 文章目录 系列论文研读目录摘要1 简介2 相关工作2.1视觉语言模型2.2 NLP中的提示学习 3 方法论3.1视觉语言预训练3.2上下文优化3.3讨论 4 实验4.1少数学习4.2领域泛化4.3进一步分析 5 结论、局限性和未来的工作 摘要 像CLIP这样的大型预训练视觉语言模型在学…

MM-PhyQA——一个专门处理高中物理选择题的 LLM 聊天机器人

概述 论文地址&#xff1a;https://arxiv.org/abs/2404.12926 人工智能的发展正在改变我们的学习方式。特别是使用大规模语言模型&#xff08;LLM&#xff09;的聊天机器人&#xff0c;通过提供个性化指导和即时反馈&#xff0c;极大地拓展了教育的可能性。 然而&#xff0c…

基于SpringBoot+Vue的二手物品交易系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的二手物品…

【网络安全】-文件包含漏洞-pikachu

文件操作漏洞包括文件上传漏洞&#xff0c;文件包含漏洞&#xff0c;文件下载漏洞。 文章目录 前言 : 什么是文件包含漏洞&#xff1f; 1.文件包含漏洞的分类&#xff1a; 本地文件包含漏洞&#xff1a; 远程文件包含漏洞&#xff1a; 2.两种文件包含漏洞的区别&#xff1a; 3.…

docker mysql 容器导入数据 .sql文件导入容器

docker mysql 容器导入数据 前言准备工作1、按需准备sql文件2、将文件上传服务器&#xff08;宿主机&#xff09;3、将sql文件复制进容器中 操作步骤1、进入容器内部2、进入数据库3、创建数据库4、切换数据库5、导入sql文件 前言 本文所涉及应用场景&#xff1a;远程部署环境…

某仿soul欲音社交系统存在任意文件读取漏洞

1 阅读须知 技术文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直…

【网络协议】了解一下HTTP 与 HTTPS 的区别

介绍&#xff1a; HTTP是超文本传输协议。规定了客户端&#xff08;通常是浏览器&#xff09;和服务器之间如何传输超文本&#xff0c;也就是包含链接的文本。通常使用TCP【1】/IP协议来传输数据&#xff0c;默认端口为80。 HTTPS是超文本传输安全协议&#xff0c;具有CA证书。…

面试必问的7大测试分类!一文说清楚!

在日常测试工作中&#xff0c;我们经常会听到“单元测试&#xff0c;集成测试&#xff0c;系统测试”之类的词汇&#xff0c;大家都知道这是按照开发阶段进行测试活动的划分。 这种划分完整的分类&#xff0c;其实是分为四种“单元测试&#xff0c;集成测试&#xff0c;系统测…

linux下使用cmake和libpng来对png图像进行读写

目标 在进行图像处理操作之前&#xff0c;首要任务是确保能够正确地读取图像。编写纯 C 语言代码进行图像处理时&#xff0c;不太适宜使用 OpenCV2。因此&#xff0c;为了遵循标准且便于操作&#xff0c;我们采用 libpng 的代码库来实现对 PNG 图像的读写。之所以选择在 Linux…

CentOS系统上Node.js安装与配置最佳实践

由于nvm下载node需要翻墙速度非常慢&#xff08;试过很多次都不行&#xff09;&#xff0c;所以推荐手动安装&#xff0c;步骤也很简单 1、官网下载 打开官网 Node.js官网下载 选择自己系统合适的版本下载&#xff0c;我这里下载的是Linux x64的v18.20版本 2.上传服务器 将…

【编译原理】编译器概述、编译器结构、编译器实例

编译器概述、编译器结构、编译器实例 编译器概述 1.编译器是一个程序 核心功能是把源代码翻译成目标代码 比如源代码&#xff1a;C/C&#xff0c;Java&#xff0c;C#&#xff0c;html 目标代码&#xff1a;X86&#xff0c;IA64,ARM,… 把一种源程序翻译成另外一种源程序&…

day19JS-AJAX

1. 什么是AJAX 原生生js中有两种通信&#xff0c;一个ajax&#xff0c;还有一个是fetch。 AJAX 并不是编程语言&#xff0c;是一种从网页访问 Web 服务器的技术。AJAX 代表异步 JavaScript 和 XML。 AJAX 使用浏览器内建的 XMLHttpRequest 对象从 web 服务器请求数据&#xff0…

RTR_Chapter_3

第三章 图形处理单元 在历史上&#xff0c;图形加速首先开始于三角形上的像素扫描线颜色插值&#xff0c;并在屏幕上显示这些颜色值。它包括访问图像数据的能力&#xff0c;这允许将纹理运用在表面上&#xff1b;添加用于插值和深度测试的硬件&#xff0c;这提供了内置的可见性…

Java学习Day41:骑龙救!(springMVC)

springMVC与sevlet都是对应表现层web的&#xff0c;但是越复杂的项目使用SpringMVC越方便 基于Java实现MVC模型的轻量级web框架 目标&#xff1a; 小案例&#xff1a; 1.导入依赖 spring-context: 提供 Spring 框架的核心功能&#xff0c;如依赖注入、事件发布和其他应用上…

R语言数据整理和分析(1)

跟着顶刊学习数据分析。本期参考文献《Trends in Dietary Vitamin A Intake Among US Adults by Race and Ethnicity, 2003-2018》&#xff0c;来源于JAMA&#xff0c;IF63.1。 该文研究&#xff1a;2003-2018年美国成年人按种族和民族划分的膳食维生素A摄入量趋势 方法学&am…

集成学习(Ensembling Learning)

0. 来源 概念比较全&#xff0c;可以作为目录&#xff0c;前置知识讲得好&#xff0c;其他一般。 01.内容简介_哔哩哔哩_bilibili01.内容简介是集成学习&#xff1a;XGBoost, lightGBM的第1集视频&#xff0c;该合集共计19集&#xff0c;视频收藏或关注UP主&#xff0c;及时了…

换个角度看PCIE发展史

讲点废话 按照我的习惯&#xff0c;在开始做一件事情之前&#xff0c;我倾向于介绍我做这个事情的思路和原因。因为往往误解就是从我们思考问题的方式开始的&#xff0c;我觉得交代清楚了我做事情的背景&#xff0c;那么你就可以顺着我的思路来思考&#xff0c;这个过程中也很…

【第29章】Spring Cloud之Sentinel规则

文章目录 前言一、规则的种类1. 流量控制规则 (FlowRule)2. 熔断降级规则 (DegradeRule)3. 系统保护规则 (SystemRule)4. 访问控制规则 (AuthorityRule)5. 热点规则 (ParamFlowRule)6.规则常量(RuleConstant) 二、查询更改规则1.查询规则(类型)2.查询规则(所有) 三、规则文件总…

Java预备知识 Day2

1.IDEA的简单使用与介绍 1.1 IDEA的项目工程介绍 Day2_0904&#xff1a;项目名称 E:\0_code\Day2_0904&#xff1a;表示当前项目所在路径 .idea&#xff1a;idea软件自动生成的文件夹&#xff0c;最好不要动 src&#xff1a;srcsourse→源&#xff0c;我们的源代码就放在这…