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.mzph.cn/news/732314.shtml

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

相关文章

gRPC-第二代rpc服务

在如今云原生技术的大环境下&#xff0c;rpc服务作为最重要的互联网技术&#xff0c;蓬勃发展&#xff0c;诞生了许多知名基于rpc协议的框架&#xff0c;其中就有本文的主角gRPC技术。 一款高性能、开源的通用rpc框架 作者作为一名在JD实习的Cpper&#xff0c;经过一段时间的学…

Flask python开发篇: 写一个简单的接口

第一步&#xff1a;新建flask项目 参考使用pycharm新建一个项目 打开pycharm&#xff0c;根据下面图中箭头顺序&#xff0c;新建一个flask的项目&#xff1b; 第二步&#xff1a;运行项目&#xff0c; 安装成功以后&#xff0c;会有个app.py文件&#xff0c;打开以后&#…

qt一个项目有且只有有一个maindow,其他小窗口用QWidget,QDialog是带有yes和no的QWidget

QMaindow QWidget QDialog区别很大 我想要在生成一个小窗口&#xff0c;结果选择基类为maindow&#xff0c;应该是QWidget 然后就出现奇奇怪怪的问题 QMaindow和QWidget不能乱选择&#xff0c;而且各自QPaintEvent也有很多区别 以下就是错误&#xff1a; 我继承maindow的基类…

云服务器实例重启后,各个微服务的接口(涉及mysql操作的)都用不了了

问题描述&#xff1a; 云服务器被黑客植入挖矿。重启云服务器实例后得到解决&#xff0c;接着把docker&#xff08;zookeeper、redis啥的&#xff09;还有后端jar包啥的都重启了&#xff0c;然后发现后端接口访问不了&#xff0c;只有不涉及数据库操作的接口正常访问&#xff…

【毕业】 医药药店销售管理系统

1、引言 设计结课作业,课程设计无处下手&#xff0c;网页要求的总数量太多&#xff1f;没有合适的模板&#xff1f;数据库&#xff0c;java&#xff0c;python&#xff0c;vue&#xff0c;html作业复杂工程量过大&#xff1f;毕设毫无头绪等等一系列问题。你想要解决的问题&am…

自动驾驶革命:解密端到端背后的数据、算力和AI奇迹

作者 |毫末智行数据智能科学家 贺翔 编辑 |祥威 最近&#xff0c;特斯拉FSD V12的发布引发了业界对端到端自动驾驶的热议&#xff0c;业界纷纷猜测FSD V12的强大能力是如何训练出来的。从马斯克的测试视频可以大致归纳一下FSD V12系统的一些核心特征&#xff1a; 训练数据&am…

防御保护第七次作业-IPSEC VPPN实验

&#xff08;场景选用点到点&#xff0c;配置好FW1的出接口地址和对端FW3的接口地址&#xff0c;认证方式选用预共享密钥&#xff0c;身份认证选用IP地址&#xff09; 1、FW1 IP Sec策略配置 IKE参数配置&#xff1a; IP Sec参数&#xff1a; FW2配置&#xff1a; 加密数据流配…

【附教程】2024,人工智能+AI绘画,看这里就够了~14款主流图像生成软件工具总有一个适合你

AI绘画技术通过深度学习和处理海量图像数据&#xff0c;能够迅速将文字描述转化为富有创意和艺术性的画作。这一技术不仅极大地提升了艺术家的创作效率和作品质量&#xff0c;还为他们提供了全新的灵感来源和创作方式&#xff0c;推动了艺术领域的创新与发展。 同时&#xff0…

Redis持久化:RDB和AOF

RDB&#xff08;Redis DataBase&#xff09; AOF&#xff08;Append Only File&#xff09; AOF重写 RDB AOF 混合持久化 开启 RDB 持久化&#xff1a; RDB 是默认启用的&#xff0c;但你可以检查并设置相关参数以满足你的需求&#xff0c;例如更改保存间隔时间、数据库大…

接口自动化测试框架搭建:基于python+requests+pytest+allure实现

众所周知&#xff0c;目前市面上大部分的企业实施接口自动化最常用的有两种方式&#xff1a; 1、基于代码类的接口自动化&#xff0c;如&#xff1a; PythonRequestsPytestAllure报告定制 2、基于工具类的接口自动化&#xff0c;如&#xff1a; PostmanNewmanJenkinsGit/svnJme…

c++0305习题

一、求下面表达式的值 1&#xff0e;0 2&#xff0e;-1 3&#xff0e;1 4&#xff0e;&#xff08;1&#xff09;1 &#xff08;2&#xff09;3.2 &#xff08;3&#xff09;0 &#xff08;4&#xff09;7.0 5.&#xff08;1&#xff09;0&#xff08;2&#xff09;300.005&a…

考虑局部遮阴的光伏PSO-MPPT控制MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 简介 光伏电池阵列的输出特性曲线不是线性变化的。当光伏电池遮荫时&#xff0c;产生的功 率会不断变化&#xff0c;致使光伏电池阵列的输出功率不断变化&#xff0c;其输出特性曲线呈现多峰值的现象。 多峰…

【漏洞复现】Linksys E2000 position.js 身份验证绕过漏洞(CVE-2024-27497)

0x01 产品简介 Linksys E2000是一款由思科&#xff08;Cisco&#xff09;品牌推出的无线路由器&#xff0c;它是一款支持2.4GHz和5GHz双频段的无线路由器&#xff0c;用户可以避开拥挤的2.4GHz频段&#xff0c;独自享受5GHz频段的高速无线生活。 0x02 漏洞概述 Linksys E200…

Jmeter 使用教程(小白一学就会)

下载 官网下载地址 解压 zip 打开 进入 jmeter 的 bin 目录下mac 电脑启动&#xff0c;执行以下命令&#xff08;注意 windows 使用 jmeter.bat 启动&#xff09; ./jmeter打开成功 修改为中文 创建测试计划 添加线程组 修改线程属性 在线程组添加 HTTP 请求 设置 Web…

深入理解MySQL中的MVCC(多版本并发控制)

在MySQL中&#xff0c;MVCC是一种用于提供并发控制的技术&#xff0c;它允许数据库系统在事务并发执行的情况下保持数据的一致性&#xff0c;同时提高了数据库的并发性能。MVCC背后的理念是允许每个事务可以看到一个一致性的快照&#xff0c;从而避免了读取操作被写入操作所阻塞…

Python算法题集_搜索二维矩阵

Python算法题集_搜索二维矩阵 题74&#xff1a;搜索二维矩阵1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【矩阵展开为列表二分法】2) 改进版一【行*列区间二分法】3) 改进版二【第三方模块】 4. 最优算法5. 相关资源 本文为Python算法题集之…

c++中string的使用!!!(适合初学者 浅显易懂)

我们先初步的认识一下string,string底层其实是一个模版类 typedef basic_string<char> string; 我们先大致的把string的成员函数列举出来 class string { private: char * str; size_t size; size_t capacity; }; 1.string的六大默认函数 1.1 构造函数、拷贝构造 注&am…

基础刷题50之四(有效的字母异位词)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、题目二、力扣官方题解1、排序2、哈希表 三、文心一言解释1、排序2、哈希表 总结 前言 刚上研一&#xff0c;有人劝我好好学C&#xff0c;当时用的不多就没…

动态规划(算法竞赛、蓝桥杯)--数位DP--Windy树

1、B站视频链接&#xff1a;E37 数位DP Windy数_哔哩哔哩_bilibili 题目链接&#xff1a;[SCOI2009] windy 数 - 洛谷 #include <bits/stdc.h> using namespace std; const int N 12; int a[N]; //把整数的每一位数字抠出来&#xff0c;存入数组 int f[N][10]; /…

代码随想录算法训练营第36天—动态规划04 | ● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集

01背包 https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1cg411g7Y6 常见的背包问题类型&#xff08;大厂面试重点掌握01背包和完全背包即可&#xf…