JavaWeb03-HTTP协议,Tomcat,Servlet

目录

一、HTTP协议

1.概述

2.特点

3.请求数据格式

(1)请求行

(2)请求头

(3)请求体

(4)常见请求头

(5)GET和POST请求区别

4.响应数据格式

(1)响应行

(2)响应头

(3)响应体:

(4)响应行状态码

(5)常见响应头

二、Web服务器TomCat

1.概述

2.基本使用

(1)下载

(2)安装

(3)启动

(4)关闭

(5)卸载

(6)部署

(7)基本配置

3.MavenWeb目录结构

(1)开发中

(2)可部署

4.MavenWeb项目创建

(1)使用骨架

(2)不使用骨架

5.在IDEA中使用Tomcat

(1)集成本地Tomcat

(2)使用插件快速启动Tomcat

三、Servlet

1.概述

2.快速入门

3.执行流程

4.生命周期

(1)概述

(2)阶段

5.体系结构

6.urlPattern配置

7.XML方式配置Servlet(了解即可)

8.注解方式配置Servlet


一、HTTP协议

1.概述

HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则

2.特点

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

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

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

优缺点:

  • 缺点:多次请求间不能共享数据。

    • Java解决方式:使用会话技术(cookie、Session)来解决。

  • 优点:速度快

3.请求数据格式

(1)请求行

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

(2)请求头

第二行开始,格式为key:value形式

(3)请求体

POST请求的最后一部分,存放请求参数。

(4)常见请求头
  • Host: 表示请求的主机名

  • User-Agent: 浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0.Chrome/79,IE浏览器的标识类似Mozilla/5.0(Windows NT .) like Gecko;

  • Accept:表示浏览器能接收的资源类型,如text/ *image/*或者*/*表示所有

  • Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;

  • Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip,deflate等。

(5)GET和POST请求区别

GET请求:

  • 请求参数在请求行中,没有请求体。

  • 请求参数大小有限制

POST请求:

  • 请求参数在请求体中

  • 请求参数大小无限制

4.响应数据格式

(1)响应行

响应数据的第一行。其中HTTP/1.1表示协议版本,200表示响应状态码,OK表示状态码描述

(2)响应头

第二行开始,格式为key:value形式

(3)响应体:

最后一部分。存放响应数据

(4)响应行状态码
状态码分类说明
1xx响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它
2xx成功——表示请求已经被成功接收,处理已完成
3xx重定向——重定向到其它地方:它让客户端再发起一个请求以完成整个处理。
4xx客户端错误——处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
5xx服务器端错误——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等

具体状态码:状态 | Status - HTTP 中文开发手册 - 开发者手册 - 腾讯云开发者社区-腾讯云

(5)常见响应头
  • Content-Type:表示该响应内容的类型,例如text/html,image/jpeg;

  • Content-Length:表示该响应内容的长度(字节数);

  • Content-Encoding:表示该响应压缩算法,例如gzip;

  • Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒

二、Web服务器TomCat

Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开 发更加便捷。主要功能是“提供网上信息浏览服务”

常见web服务器软件:

  • Apache Tomcat

  • jetty

  • WebLogic

  • WebSphere

  • ...

主要作用:

  • 封装HTTP协议,简化开发。

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

1.概述

Tomcat是Apache 软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Servlet/JSP少量JavaEE规范。

Tomcat 也被称为 Web容器、Servlet容器。Servlet 需要依赖于 Tomcat才能运行

javaEE:

Java Enterprise Edition,Java企业版。指java企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、JavaIDL、JTS、JTA、JavaMail、JAF。

Apache Tomcat® - Welcome!

2.基本使用

(1)下载

官网下载

选好版本下载即可,源码也可下载,在后面

(2)安装

下载完解压即可

目录文件说明:

(3)启动

bin目录,startup

.bat:window系统

.sh:Linux系统

之后在浏览器网址输入localhost:8080查看是否成功

控制台乱码解决:

conf/logging.properties

端口号被占用:

方式一:

找到对应程序,将其关闭

Windows10关闭占用某一端口号的进程_windows10 停止端口-CSDN博客

方式二:

更改启动端口号

窗口闪退:

检查JAVA-HOME环境变量

(4)关闭

命令窗口X:强制关闭(相当于直接按掉电脑电源)

shutdown:正常关闭

Ctrl + c:正常关闭

(5)卸载

删掉Tomcat文件目录即可

(6)部署

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

一般JavaWeb项目会被打成war包,然后将war包放到 webapps目录下,Tomcat会自动解压缩 war文件

访问:服务器ip地址/端口号/项目名称/资源文件

(7)基本配置

修改启动端口号:

conf/server.xml:port

HTTP协议默认端口号为80,如果将Tomcat端口号改为80,则将来访问Tomcat时,将不用输入端口号

3.MavenWeb目录结构

(1)开发中

相对与Maven项目,多了一个webapp目录

项目名称

  • src

    • main

      • java

      • resources

      • webapp:web项目特有(名称可改,但没必要)

        • html:html文件目录(可自定)

        • WEB—INF(web项目核心,不能修改名称)

          • web.xml(web配置文件)

    • test

  • pom

打包方式为war

(2)可部署

项目名称:项目访问路径(虚拟目录)

  • html

  • WEB—INF

    • classes:存放Java字节码文件和resources资源文件

    • lib:项目所需jar包(pom.xml中依赖坐标对应的jar包)

    • web.xml

4.MavenWeb项目创建

(1)使用骨架

勾选使用骨架后选择后缀为webapp的,注意不是下图的

是这个!!!

等待下载完成

完成后目录结构

如果觉得不好看可点下图的

之后pom文件,从12行开始,到结束可以全部删掉

之后根据上边的项目结构补齐即可

(2)不使用骨架
  • 创建Maven项目

  • pom中更改打包方式

之后点击+号添加xml文件即可,如果目录位置不对自己拖一下或者改一下就行了

5.在IDEA中使用Tomcat

(1)集成本地Tomcat

运行后测试即可

(2)使用插件快速启动Tomcat

插件名:Maven helper

使用方式:

  • 先下载Maven helper插件

  • 在pom中添加tomcat依赖

alt + ins,选择引入插件模板

<!--            tomcat插件--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version>
<!--                配置,可选--><configuration>
<!--                    端口号--><port>8080</port>
<!--                    资源路径--><path>/</path></configuration></plugin>

之后

插件加载慢/没有内容的解决方案:

方式一:设置资源网址+代理

之后找到国内镜像网址:plugins.jetbrains.com/plugins/list?channel=alpha&pluginId=5047

添加即可

连接不稳定的话多尝试几次,实在不行就看方式二

方式二:

  • 直接访问JetBrains Marketplace:如果访问不到检查一下网络~

  • 搜索插件,并下载到本地

  • IDEA安装本地插件

手动唯一不好的是需要自己匹配版本,也不难,网上搜一下就知道了~

运行一下发现报错了:

报错信息:

打开该目录,发现没有setting.xml文件

解决方式:

方式一:

从别的地方粘一个setting.xml文件

方式二:

该目录下新建一个setting.xml,将内容粘过来

方式三:

去掉√,使用默认配置文件

方式四:

使用本地maven的配置文件

运行:

三、Servlet

1.概述

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

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

动态web资源:HTML、CSS、JS、图片、音频、视频等

静态web资源:不同类用户浏览到的内容不一样,最明显的举例VIP~

2.快速入门

  • 创建web项目,导入Servlet依赖坐标

 <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version>
<!--      tomcat自带了Servlet的jar包,避免冲突--><scope>provided</scope></dependency>
  • 创建一个类,实现servlet接口,并重写接口中的所有方法

  • 在类上使用@WebServlet注解,配置该Servlet的访问路径

@WebServlet("/demo")
public class demo implements Servlet {
​public void init(ServletConfig servletConfig) throws ServletException {
​}
​/*** 获取ServletConfig对象* @return ServletConfig对象*/public ServletConfig getServletConfig() {return null;}/*** Servlet被访问的时候就会执行* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("hello Servlet");}
​/*** 获取Servlet信息* @return Servlet信息*/public String getServletInfo() {return null;}
​/*** 销毁Servlet* 内存释放、服务器关闭(正常关闭)*/public void destroy() {System.out.println("Servlet销毁");}
}
  • 启动Tomcat,浏览器输入URL访问该servlet

3.执行流程

[①http://localhost:8080]【②/tomcat_demo_war】{③/demo}

①:访问web服务器Tomcat

②:访问web服务器中的项目

③:访问对应的Servlet

  • Tomcat创建Servlet对象

  • Tomcat调用Servlet对象的service方法

服务器怎么知道Servlet中一定有service方法?

因为自定义的Servlet,必须实现Servlet接口并重写其方法,而Servlet接口中有service方法

4.生命周期

(1)概述

对象的生命周期指一个对象从被创建到被销毁的整个过程

(2)阶段

Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段

  • 加载和实例化:默认情况下,当servlet第一次被访问时,由容器创建Servlet对象

//通过以下方式更改
@WebServlet(urlPatterns = "/demo" loadOnStartup =1)
//负整数:第一次被访问时创建Servet对象(默认)
//0或正整数:服务器启动时创建Servlet对象数字越小优先级越高
  • 初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次

  • 请求处理每次请求servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理服务

  • 终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收,只调用一次

内存释放、服务器关闭的时候(正常关闭),Servlet对象会被销毁,调用destroy()方法

5.体系结构

B/S架构的web项目:自定义Servlet,会继承HttpServlet

根据不同请求执行不同方法

public class demo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//}
​@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//}
}

6.urlPattern配置

Servlet 要想被访问,必须配置其访问路径(urlPattern)

1.一个Servlet,可以配置多个 urlPattern

@WebServlet(urlPatterns ={"/demo1","/demo2"})

2.urlPattern 配置规则

  • 精确匹配

    • 配置路径:

      @WebServlet(urlPatterns ="/users/peter")
    • 访问路径:

      http://localhost:8080/users/peter
  • 目录匹配

    • 配置路径:

      @WebServlet(urlPatterns ="/users/*")
    • 访问路径:

      http://localhost:8080/users/peter
      http://localhost:8080/users/tom
      ...
  • 扩展名匹配

    • 配置路径:

      @WebServlet(urlPatterns ="*.jpg")
    • 访问路径:

      http://localhost:8080/users/peter.jpg
      http://localhost:8080/users/a.jpg
      ....
  • 任意匹配

    • 配置路径:

      @WebServlet(urlPatterns ="/")
      @WebServlet(urlPatterns ="/*")
    • 访问路径:

      http://localhost:8080/users/*

/和 /* 区别:

  • 当我们的项目中的Servet配置了“/”,会覆盖掉tomcat中的DefaultServet,当其他的 url-pattern都匹配不上时都会走这个Servlet,会导致一些静态资源访问不到

  • 当我们的项目中配置了“/*”,意味着匹配任意访问路径

越精准优先级越高:精确>目录>拓展>/*>/

7.XML方式配置Servlet(了解即可)

  • 编写Servlet类

  • 在web.xml中配置该Servlet

<servlet><servlet-name>demo5</servlet-name><servlet-class>com.itheima.web.servlet,ServletDemo5</servlet-class>
</servlet>
<servlet-mapping><servlet-name>demo5</servlet-name><url-pattern>/demo5k</url-pattern>
</servlet-mapping>

8.注解方式配置Servlet

  • 编写Servlet类(通过实现Servlet接口或继承HttpServlet都可)

  • 在该类上方添加注解:@WebServlet("/demo")

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分销商城微信小程序:用户粘性增强,促进复购率提升

在数字化浪潮的推动下&#xff0c;微信小程序作为一种轻便、高效的移动应用形式&#xff0c;正成为越来越多企业开展电商业务的重要平台。而分销商城微信小程序的出现&#xff0c;更是为企业带来了前所未有的机遇。通过分销商城微信小程序&#xff0c;企业不仅能够拓宽销售渠道…

PyQt5实现远程更新exe可执行文件

PyQt5实现远程下载更新exe可执行文件 1、实现流程 1、获取远程http地址 2、获取需要更新的exe文件 3、点击更新 4、把exe强关闭 5、下载文件 6、更新2、效果图 3、示例代码 conf.ini配置文件: {"http_address_edit_value": "http://xxx.com/xxx/xxx.exe&qu…

数据结构从入门到精通——队列

队列 前言一、队列1.1队列的概念及结构1.2队列的实现1.3队列的实现1.4扩展 二、队列面试题三、队列的具体实现代码Queue.hQueue.ctest.c队列的初始化队列的销毁入队列出队列返回队头元素返回队尾元素检测队列是否为空检测元素个数 前言 队列是一种特殊的线性数据结构&#xff…

【蓝桥杯-单片机】基础模块LED和按键

文章目录 【蓝桥杯-单片机】Led、按键等基础模块01 前置准备&#xff08;1&#xff09;新建工程&#xff08;4&#xff09;编写程序 02 基础模块&#xff1a;LED&#xff08;0&#xff09;LED原理图&#xff08;1&#xff09;对P1整体赋值&#xff0c;控制所有的LED灯&#xff…

three.js如何实现简易3D机房?(一)基础准备-下

接上一篇&#xff1a; three.js如何实现简易3D机房&#xff1f;&#xff08;一&#xff09;基础准备-上&#xff1a;http://t.csdnimg.cn/MCrFZ 目录 四、按需引入 五、导入模型 四、按需引入 index.vue文件中 <template><div class"three-area">&l…

算法第二十五天-寻找排序数组中的最小值

寻找排序数组中的最小值 题目要求 解题思路 二分法 代码 class Solution:def findMin(self, nums: List[int]) -> int:low, high 0, len(nums) - 1while low < high:pivot low (high - low) // 2if nums[pivot] < nums[high]:high pivot else:low pivot 1re…

计算两帧雷达数据之间的变换矩阵

文章目录 package.xmlCMakeLists.txtpoint_cloud_registration.cc运行结果 package.xml <?xml version"1.0"?> <package format"2"><name>point_cloud_registration</name><version>0.0.0</version><descriptio…

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的按键扫描、数码管显示按键值、显示按键LED应用

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的按键扫描、数码管显示按键值、显示按键LED应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍TM1638键盘…

Spring Boot中实现图片上传功能的两种策略

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

js 清空数组的方法

1、直接赋值空数组 let array [1, 2, 3, 4, 5]; array []; 这种方法并不推荐&#xff0c;如下图所示&#xff1a; 虽然a数组确实变为了空数组&#xff0c;但这种方法只是修改了a的指向&#xff0c;把a指向一个新的空数组&#xff0c;然而[1,2,3,4,5]这个数组并没有被清除&a…

Matlab偏微分方程拟合 | 完整源码 | 视频教程

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法&#xff0c;并提供所有案例完整源码&#xff1b;2.…

Python——与Matlab对应的Python版本

参考资料&#xff1a; Python——与Matlab对应的Python版本

基于java+springboot+vue实现的学生信息管理系统(文末源码+Lw+ppt)23-54

摘 要 人类现已进入21世纪&#xff0c;科技日新月异&#xff0c;经济、信息等方面都取得了长足的进步&#xff0c;特别是信息网络技术的飞速发展&#xff0c;对政治、经济、军事、文化等方面都产生了很大的影响。 利用计算机网络的便利&#xff0c;开发一套基于java的大学生…

第十篇 - 如何利用人工智能技术做好营销流量整形管理?(Traffic Shaping)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市​​​​​​​。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先…

【蓝桥杯】蓝桥杯算法复习(一)

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

UnityShader——09数学知识3

方阵 行与列数量相等的矩阵,n*n阶矩阵 对角矩阵 当对角线以外的矩阵内元素全为0&#xff0c;则称之为对角矩阵&#xff0c;对角矩阵的前提是必须是方阵 单位矩阵 对角线元素全为1&#xff0c;其余元素全为0&#xff0c;属于对角矩阵的一部分 矩阵和向量 把1 * n阶矩阵称…

PySide6+VSCode Python可视化环境搭建

pip install pyside6 下载本期源码 vscode装一个PYQT Integration插件&#xff0c;设置好两个路径&#xff08;下面有个脚本用于获取路径&#xff09; 用everything的童鞋注意了&#xff1a;工具/选项/索引/强制重建 重启vscode可以看到&#xff0c;右击.ui文件时出现可以操作…

【C/C++】常量指针与指针常量的深入解析与区分(什么是const int * 与 int * const ?)

目录 一、前言 二、const 的简单介绍 三、常量指针 &#x1f50d;介绍与分析 &#x1f4f0;小结与记忆口诀 四、指针常量 &#x1f50d;介绍与分析 &#x1f4f0;小结与记忆口诀 五、总结与提炼 六、共勉 一、前言 在【C/C】的编程中&#xff0c;指针与const关键字的组合…

vulhub中Weblogic < 10.3.6 ‘wls-wsat‘ XMLDecoder 反序列化漏洞(CVE-2017-10271)复现

Weblogic的WLS Security组件对外提供webservice服务&#xff0c;其中使用了XMLDecoder来解析用户传入的XML数据&#xff0c;在解析的过程中出现反序列化漏洞&#xff0c;导致可执行任意命令。 访问http://your-ip:7001/即可看到一个404页面&#xff0c;说明weblogic已成功启动 …

Git相关配置的指令

1.获取当前Git的配置信息 获取Git的配置信息&#xff1a; git config -l 作为一个工具软件来讲&#xff0c;一般都会有默认的配置文件来保存基础的配置信息&#xff0c;Git软件的配置文件位置为&#xff1a;Git安装路径/etc/gitconfig 2.名称和邮箱 如果你是第一回使…