JavaWeb03-HTTP协议,Tomcat,Servlet

2024-03-06 11:20

本文主要是介绍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")

这篇关于JavaWeb03-HTTP协议,Tomcat,Servlet的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779901

相关文章

IDEA中配置Tomcat全过程

《IDEA中配置Tomcat全过程》文章介绍了在IDEA中配置Tomcat的六步流程,包括添加服务器、配置部署选项、设置应用服务器及启动,并提及Maven依赖可能因约定大于配置导致问题,需检查依赖版本... 目录第一步第二步第三步第四步第五步第六步总结第一步选择这个方框第二步选择+号,找到Tomca

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与