【JavaWeb】---->Servlet& Tomcat

本文深入探讨了Tomcat服务器的配置与IDEA集成,详细阐述了Servlet的概念、执行原理、生命周期以及POST与GET的区别。同时,介绍了HTTP协议的基本概念、请求消息数据和响应消息数据的格式。此外,还讨论了Request对象的功能,包括获取请求行、头和体的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Web服务器软件

服务器:安装了服务器软件的计算机。
服务器软件:接收用户的请求,处理请求,做出响应。
Web服务器软件:在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目。

常见的java相关的web服务器软件:

  • webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的
  • webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的
  • JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的
  • Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的
  • JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范

二、 Tomcat

Tomcat是Web服务器软件。
 下载安装就不说了,说一说启动 Tomcat可能会遇到的问题:

  1. 黑窗口一闪而过:
  • 原因: 没有正确配置JAVA_HOME环境变量
  • 解决方案:正确配置JAVA_HOME环境变量
  1. 启动报错:

暴力解决:找到占用的端口号,并且找到对应的进程,杀死该进程
netstat -ano

温柔解决:修改自身的端口号。

conf/server.xml
<Connector port="8888" protocol="HTTP/1.1"
   connectionTimeout="20000"
    redirectPort="8445" />
一般会将tomcat的默认端口号修改为80。80端口号是http协议的默认端口号。
好处:在访问时,就不用输入端口号

1、配置

部署项目的方式:

  1. 直接将项目放到webapps目录下即可。
 /项目名称:项目的访问路径-->虚拟目录
 简化部署:将项目打成一个war包,再将war包放置到webapps目录下。
 war包会自动解压缩
  1. 配置conf/server.xml文件
<Host>标签体中配置
<Context docBase="D:\hello" path="/hehe" />
docBase:项目存放的路径
 path:虚拟目录
  1. 在conf\Catalina\localhost创建任意名称的xml文件
在文件中编写<Context docBase="D:\hello" />
	虚拟目录:xml文件的名称

 将Tomcat集成到IDEA中,并且创建JavaEE的项目,部署项目。

2、idea与tomcat的相关配置

1、IDEA会为每一个tomcat部署的项目单独建立一份配置文件

 查看控制台的log:Using CATALINA_BASE: 
 "C:\Users\fqy\.IntelliJIdea2018.1\system\tomcat\_itcast"
  1. 工作空间项目和 tomcat部署的web项目
  • tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目"对应着"工作空间项目” 的web目录下的所有资源
  • WEB-INF目录下的资源不能被浏览器直接访问。
  1. 断点调试:使用"小虫子"启动 dubug 启动

三、Servlet

1、 概念

  Servlet是运行在服务端的小程序,是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
  将来我们自定义一个类,实现Servlet接口,复写方法。

2、Servle执行原理

1、当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径。
2、查找web.xml文件,是否有对应的标签体内容
3、如果有则在找到对应的全类名
4、tomcat会将字节码文件加载进内存,并且创建其对象
5、调用其方法

3、体系结构

Servlet – 接口
  |
GenericServlet – 抽象类
  |
HttpServlet – 抽象类

GenericServlet


 1. 将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象。
 2. 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可。

HttpServlet(推荐使用)

对http协议的一种封装,简化操作

  1. 定义类继承HttpServlet
  2. 复写doGet/doPost方法

4、Servlet中的生命周期

1、被创建

执行init方法,只执行一次。默认情况下,第一次被访问时,Servlet被创建。
可以配置执行Servlet的创建时机。

在<servlet>标签下配置:
	1. 第一次被访问时,创建
   			 <load-on-startup>的值为负数
   	2. 在服务器启动时,创建
			 <load-on-startup>的值为0或正整数

  Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的。

2、提供服务

执行servlet方法,执行多次,每次访问Servlet时,Service方法都会被调用一次。

3、被销毁

  • 执行destroy方法,执行一次。
  • Servlet被销毁时执行。服务器关闭时,Servlet被销毁
  • 只有服务器正常关闭时,才会执行destroy方法。
  • destroy方法在Servlet被销毁之前执行,一般用于释放资源

4、Post与Get区别

  这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据

get:
  GET 调用用于获取服务器信息,并将其做为响应返回给客户端。当经由Web浏览器或通过HTML、JSP直接访问Servlet的URL时,一般用GET调用。 GET调用在URL里显示正传送给servlet的数据,这在系统的安全方面可能带来一些问题

post:
  它用于客户端把数据传送到服务器端,也会有副作用。但好处是可以隐藏传送给服务器的任何数据。Post适合发送大量的数据。

5、 Servlet相关配置

  1. urlpartten:Servlet访问路径
    一个Servlet可以定义多个访问路径 : @WebServlet({“/d4”,“/dd4”,“/ddd4”})
  2. 路径定义规则:
 3. /xxx:路径匹配
 4. /xxx/xxx:多层路径,目录结构
 5. *.do:扩展名匹配

6、请求转发(Forward)与重定项(Redirect)

加粗样式请求转发Forward特点:

  1. 转发地址栏路径不变
  2. 转发只能访问当前服务器下的资源
  3. 转发是一次请求,可以使用request对象来共享数据
    重定项Redirect特点:
    1.地址栏发生变化
    2.重定项可以访问其他站点(服务器)的资源
    3.重定项是两次请求。不能使用request对象来共享数据

四、HTTP

1、概念

HTTP是超文本传输协议。传输协议:定义了,客户端和服务器端通信时,发送数据的格式。
特点:

  1. 基于TCP/IP的高级协议
  2. 默认端口号:80
  3. 基于请求/响应模型的:一次请求对应一次响应
  4. 无状态的:每次请求之间相互独立,不能交互数据

2、请求消息数据

客户端发送给服务器端的数据。

请求消息数据格式

1、请求行

请求方式 请求url 请求协议/版本:GET /login.html HTTP/1.1

请求方式:HTTP协议有7种请求方式,常用的有2种
GET:

  1. 请求参数在请求行中,在url后。
  2. 请求的url长度有限制的
  3. 不太安全
    POST:
    1、 请求参数在请求体中
    2、请求的url长度没有限制的
    3、相对安全
2、请求头

客户端浏览器告诉服务器一些信息。

  1. User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
    可以在服务器端获取该头的信息,解决浏览器的兼容性问题

  2. Referer:http://localhost/login.html
    告诉服务器,我(当前请求)从哪里来?
    作用:
    1. 防盗链:
    2. 统计工作:

3、请求空行

空行,就是用于分割POST请求的请求头,和请求体的。

4、请求体

封装POST请求消息的请求参数的

3、响应消息数据

服务器端发送给客户端的数据

响应消息数据格式

1、响应行

组成:协议/版本,响应状态码,状态码描述。

响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态
分类:
在这里插入图片描述

2、响应头

在这里插入图片描述

五、Request

1. request对象和response对象的原理

  1. request和response对象是由服务器创建的。我们来使用它们
  2. request对象是来获取请求消息,response对象是来设置响应消息

2. request对象继承体系结构

在这里插入图片描述

3. request功能

1、获取请求消息数据

  1. 获取请求行数据
  • GET /day14/demo1?name=zhangsan HTTP/1.1
    方法:
    在这里插入图片描述
  1. 获取请求头数据
    在这里插入图片描述

  2. 获取请求体数据:
    请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
    在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值