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 {
    @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.mfbz.cn/a/431418.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python一些可能用的到的函数系列125 FSM工具transitions

说明 首先FSM是一个很有用的工具&#xff0c;在程序设计中&#xff0c;某个对象会对应若干不同的状态&#xff0c;在这个状态下&#xff0c;同样的方法会有不一样的行为。 python有个transitions包可以做这个&#xff0c;过去一直不想用&#xff0c;主要是感觉有点鸡肋。 本质…

基于springboot+vue的个人博客系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Vue自定义商品发布组件

文章目录 一、代码展示二、代码解读三、结果展示 一、代码展示 <template><div><a-popover trigger"hover" :getPopupContainer"triggerNode > {return triggerNode.parentNode || document.body;}"><template #content><d…

Redis面试总结

概述 1. Redis是什么&#xff1f;简述它的优缺点&#xff1f; Redis本质上是一个Key-Value类型的内存数据库&#xff0c;很像Memcached&#xff0c;整个数据库加载在内存当中操作&#xff0c;定期通过异步操作把数据库中的数据flush到硬盘上进行保存。 因为是纯内存操作&…

[Angular 基础] - routing 路由(下)

[Angular 基础] - routing 路由(下) 之前部分 Angular 笔记&#xff1a; [Angular 基础] - 自定义指令&#xff0c;深入学习 directive [Angular 基础] - service 服务 [Angular 基础] - routing 路由(上) 使用 route 书接上回&#xff0c;继续折腾 routing 按照最初的 wi…

ffmpeg使用命令实现音视频分离

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、简单介绍二、具体操作三、验证1.源文件2.视频文件3.音频文件 四、补充总结 前言 有时候由于特殊需要可能需要将一个视频&#xff08;带音频&#xff09;的…

洛谷:P3068 [USACO13JAN] Party Invitations S(枚举、前缀和)

这题我们数据范围太大&#xff0c;用二维肯定是不行的&#xff0c;我们可以采用一维线性存储。 如题意&#xff0c;我们可以将每组奶牛编号都存在一维数组里面&#xff0c;只需记录每组的头尾指针就可以了。 如题中样例我们就可以存储成1 3 3 4 1 2 3 4 5 6 7 4 3 2 1 然后第…

docker部署aria2-pro

前言 我平时有一些下载视频和一些资源文件的需求&#xff0c;有时候需要离线下载&#xff0c;也要速度比较快的方式 之前我是用家里的玩客云绝育之后不再写盘当下载机用的&#xff0c;但是限制很多 我发现了aria2 这个下载器非常适合我&#xff0c;而有个大佬又在原来的基础…

基于 Vue3打造前台+中台通用提效解决方案(上)

基于 Vue3打造前台+中台通用提效解决方案 1、项目架构 本项目使用vite + vue3来实现前中台解决方案 2、为什么使用vite ? 因为,之前的项目一直都是使用webpack作为构建工具;vite出来这么久了,也没有用过;所以想在当前项目下进行使用; 2.1、为什么vite比webpack块? …

android开发文档下载,你的技术真的到天花板了吗

Android 基础 1.Activity 1、 什么是 Activity&#xff1f; 2、 请描述一下 Activity 生命周期 …… 2.Service 3.Broadcast Receiver32 4.ContentProvider 5.ListView 6.Intent 7.Fragment 1.Fragment 跟 Activity 之间是如何传值的 2.描述一下 Fragment 的生命周期 3.Fragme…

Qt多弹窗实现包括QDialog、QWidget、QMainWindow

1.相关说明 独立Widget窗口、嵌入式Widget、嵌入式MainWindow窗口、独立MainWindow窗口等弹窗的实现 相关界面包含关系 2.相关界面 3.相关代码 mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include "tformdoc.h" #incl…

容器云平台巡检实战:运维进阶技巧与策略

1 docker容器日常巡检 通过以下方式进行检查&#xff1a; 1.1 docker/podman ps查看容器状态 Docker/podman ps -a 查看容器状态STATUS&#xff1a; Exited(0)&#xff1a;表示容器正常退出 Exited(其他数字)&#xff1a;容器异常退出&#xff0c;需要通过log 查看原因 Up…

080|为什么阿里的价值观值得你关注?

在阿里巴巴20周年年会现场&#xff0c;万众瞩目之下&#xff0c;马云和张勇完成了阿里巴巴董事长职务的交接。 不过你也知道&#xff0c;这次接棒在一年前就已经公布了&#xff0c;在年会上只是一个仪式。在20周年年会过后&#xff0c;我找到了互联网圈的资深媒体人阳淼&#…

julia语言使用PyCall包调用Python代码及Python包

Julia语言虽然好&#xff0c;但是包管理方面和生态环境感觉还有一点小小的缺陷&#xff0c;但是Julia可以调用Python丰富的包&#xff0c;用起来很方便。 安装PyCall 在安装之前先确认下Julia和Python的版本&#xff0c;我使用的稳定版本的 Julia1.6.7&#xff0c;Python版本是…

电磁兼容(EMC):单、双面PCB板设计要点

目录 1 产品设计原则&#xff1a;性价比为第一要素 2 布局设计要点 3 布线设计要点 4 完整地平面不是最优方案 1 产品设计原则&#xff1a;性价比为第一要素 PCB在电磁兼容设计中通常是要求有完整的地和电源平面。但多层价格让对价格敏感的产品望而却步&#xff0c;只能采…

GPT本地化研究(JAVA版本)

1.我觉得gpt3 600多G个人是不可能部署得成功的,回想我自己个人不可能每一方面知识都知道,我只是知道最多的是我自己擅长的,百事通需要靠大公司才能解决,我们只是要关注这个gpt是哪个领域的, 我想做的是工业—>自动化gpt(貌似这个方向日本很专业了*_*) 它山之石可以攻玉 2.gp…

【设计模式 03】抽象工厂模式

一个具体的工厂&#xff0c;可以专门生产单一某一种东西&#xff0c;比如说只生产手机。但是一个品牌的手机有高端机、中端机之分&#xff0c;这些具体的属于某一档次的产品都需要单独建立一个工厂类&#xff0c;但是它们之间又彼此关联&#xff0c;因为都共同属于一个品牌。我…

视觉Transformers中的位置嵌入 - 研究与应用指南

视觉 Transformer 中位置嵌入背后的数学和代码简介。 自从 2017 年推出《Attention is All You Need》以来&#xff0c;Transformer 已成为自然语言处理 (NLP) 领域最先进的技术。 2021 年&#xff0c;An Image is Worth 16x16 Words 成功地将 Transformer 应用于计算机视觉任务…

【go语言开发】yaml文件配置和解析

本文主要介绍使用第三方库来对yaml文件配置和解析。首先安装yaml依赖库&#xff1b;然后yaml文件中配置各项值&#xff0c;并给出demo参考&#xff1b;最后解析yaml文件&#xff0c;由于yaml文件的配置在全局中可能需要&#xff0c;可定义全局变量Config&#xff0c;便于调用 文…

面试题HTML+CSS+网络+浏览器篇

文章目录 Css预处理sass less是什么&#xff1f;为什么使用他们怎么转换 less 为 css&#xff1f;重绘和回流是什么http 是什么&#xff1f;有什么特点HTTP 协议和 HTTPS 区别什么是 CSRF 攻击HTML5 新增的内容有哪些Css3 新增的特性flex VS grid清除浮动的方式有哪些&#xff…
最新文章