JavaWeb03-HTTP协议,Tomcat,Servlet

news2024/11/17 15:26:05

目录

一、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 {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //
    }
​
    @Override
    protected 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.coloradmin.cn/o/1492627.html

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

相关文章

uniapp 手写 简易 时间轴 组件

一、案例如图 该案例设计条件&#xff1a; 左侧时间 和竖线、点、内容都是居中对其的&#xff0c;上下时间点中间要有一段距离 二、编写逻辑 1. 布局结构&#xff1a;一共三个元素&#xff0c;左侧是时间和黑点&#xff0c;中间是线条&#xff0c;右侧是内容 2. 样式难点&#…

MATLAB知识点:循环语句中的break 和 continue 关键字

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自​第4章&#xff1a;MATLAB程序流程控制 break 和 con…

Pytorch学习 day03(Tensorboard、Transforms)

Tensorboard Tensorboard能够可视化loss的变化过程&#xff0c;便于我们查看模型的训练状态&#xff0c;也能查看模型当前的输入和输出结果 在Pycharm中&#xff0c;可以通过按住ctrl&#xff0c;并左键点击某个库来进入源文件查看该库的使用方法SummaryWriter是用来向log_dir…

六、软考-系统架构设计师笔记-软件工程基础知识

1、软件工程 软件工程是将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护&#xff0c;即将工程化应用于软件并对上述方法的研究。 软件要经历从需求分析、软件设计、软件开发、运行维护&#xff0c;直至被淘汰这样的全过程&#xff0c;这个过程称为软件的生…

【Android】位置修改相关

获取位置服务总开关状态 //获取LOCATION_MODE值&#xff0c;但adb状态下无法获取 //0为关闭&#xff0c;1 gps、2 network、3 高精度等 int state Settings.Secure.getInt(mContext.getContentResolver(),Settings.Secure.LOCATION_MODE,Settings.Secure.LOCATION_MODE_HIGH_…

嵌入式硬件设计实例:基于STM32的流水灯原理图和PCB设计

最近本来在忙别的事&#xff0c;大约忙到五一以后吧&#xff0c;没有时间研究一些深入的知识。本来想停更的&#xff0c;但是刚刚申请到博客专家&#xff0c;想想还是得更新点文章。这里就把一些以前我做过的一些简单的硬件设计拿来出来复习一下。 本篇文章就来介绍一下&#…

【论文翻译】结构化状态空间模型

文章目录 3.2 对角结构化状态空间模型3.2.1 S4D:对角SSM算法3.2.2 完整应用实例 3.3 对角化加低秩&#xff08;DPLR&#xff09;参数化3.3.1 DPLR 状态空间核算法3.3.2 S4-DPLR 算法和计算复杂度3.3.3赫尔维兹&#xff08;稳定&#xff09;DPLR形式 这篇文章是Mamba作者博士论文…

重量的定义、质量和重量之间的区别

一、简述 物体的重量取决于该物体所在空间点的引力场。重量是一种力&#xff0c;因此它是一个矢量&#xff0c;这意味着它有方向和大小。通过自由体图来表示物体重量产生的力通常很方便。 重量总是从物体的质心向下作用到地球中心。&#xff08;如果你在不同的天体上&#xff0…

万物皆可模块化分解

引言 为何要模块化&#xff0c;这里的主体是人&#xff0c;客体是事物。当事物很小时&#xff0c;人可以很轻松的解决&#xff1b;但是当事物远大于人能处理的范围时&#xff0c;我们就可以考虑对它进行模块化分解。模块化是一种解决复杂问题的方式&#xff0c;放之四海而皆可…

LVS集群(Linux Virtual server)相关介绍及LVS的NAT模式部署

群集的含义 ●Cluster&#xff0c;集群、群集由多台主机构成&#xff0c;但对外只表现为一个整体&#xff0c;只提供访问入口(域名或IP地址)&#xff0c;相当于一台大型计算机 问题&#xff1a; 互联网应用中&#xff0c;随着站点对硬件性能、响应速度、服务稳定性、数据可靠…

Nvm下载安装和基本使用

下载与安装 github地址&#xff1a;Releases coreybutler/nvm-windows (github.com) 默认安装&#xff1a;安装nvm时候&#xff0c;全默认即可&#xff08;如果自定义目录&#xff0c;切记 nvm的安装路径 &#xff1a;不要有汉字&#xff0c;不要有空格&#xff0c;不然后面会…

day04-SpringBootWeb入门

一、SpringBootWeb快速入门 1 需求 需求&#xff1a;基于 SpringBoot 的方式开发一个 web 应用&#xff0c;浏览器发起请求 /hello后&#xff0c;给浏览器返回字符串“Hello World ~”。 2 开发步骤 第1步&#xff1a;创建 SpringBoot 工程项目 第2步&#xff1a;定义 HelloC…

在 Rust 中实现 TCP : 3. TCP连接四元组

连接四元组 我们的项目已经取得了很大的进展——接下来能够开始解决 TCP 协议的实现问题。下面将讨论 TCP 的一些行为及其各种状态。 在多任务操作系统中&#xff0c;各种应用程序&#xff08;例如 Web 服务器、电子邮件客户端等&#xff09;需要同时进行网络访问。为了区分这…

使用GitOps自动化推动AI/ML工作流程

作为一名深耕自动化和人工智能领域的开发人员&#xff0c;我们逐渐认识到尖端工具和方法之间的显着协同作用&#xff0c;这些协同作用突破了可能性的界限。在这次探索中&#xff0c;我们想分享一个概念&#xff0c;它不仅彻底改变了我们的软件开发和基础设施管理方法&#xff0…

华为智慧教室3.0的晨光,点亮教育智能化变革

“教室外有更大的世界&#xff0c;但世界上没有比教室更伟大的地方。” 我们在求学阶段&#xff0c;都听说过这句话&#xff0c;但往往是在走出校园之后&#xff0c;才真正理解了这句话。为了让走出校园的孩子能够有能力&#xff0c;有勇气探索广阔的世界。我们应该准备最好的教…

JProfiler详解 JVM性能监测内存泄露分析工具

JProfiler详解 JProfiler简介主要功能特点使用场景注意事项使用案例使用步骤Could not verify ssh-ed25519 host key with fingerprint 问题解决内存泄露分析 JProfiler简介 JProfiler是一款业界领先的Java性能分析工具&#xff0c;由ej-technologies公司开发&#xff0c;专门…

Elasticsearch:使用 Streamlit、语义搜索和命名实体提取开发 Elastic Search 应用程序

作者&#xff1a;Camille Corti-Georgiou 介绍 一切都是一个搜索问题。 我在 Elastic 工作的第一周就听到有人说过这句话&#xff0c;从那时起&#xff0c;这句话就永久地印在了我的脑海中。 这篇博客的目的并不是我出色的同事对我所做的相关陈述进行分析&#xff0c;但我首先…

dolphinescheduler调用API

&#xff08;作者&#xff1a;陈玓玏&#xff09; 1. 打开api文档 api文档地址&#xff1a;http://{api server ip}:12345/dolphinscheduler/swagger-ui/index.html?languagezh_CN&langcn&#xff0c;我是用k8s部署的&#xff0c;所以ip和端口是由service决定的&#xf…

前端学习之HTML(第二天)--多媒体标签和表格标签

注&#xff1a;里面的注释是对各个标签的解释 多媒体标签 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title> </head> <body> <!-- audio是音频可以填写绝对路径也可填写相对路径 --> &l…

【Hadoop大数据技术】——Hadoop概述与搭建环境(学习笔记)

&#x1f4d6; 前言&#xff1a;随着大数据时代的到来&#xff0c;大数据已经在金融、交通、物流等各个行业领域得到广泛应用。而Hadoop就是一个用于处理海量数据的框架&#xff0c;它既可以为海量数据提供可靠的存储&#xff1b;也可以为海量数据提供高效的处理。 目录 &#…