Servlet的生命周期/运行机制

本文详细介绍了Servlet的生命周期及其特点,包括从加载到销毁的五个关键阶段,并解释了如何通过init、service和destroy方法进行观察。此外,还阐述了Servlet的运行机制,包括如何在服务器端处理请求及其实现过程。

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


Servlet在Java中的作用
https://blog.youkuaiyun.com/qq_41142325/article/details/80059798

一、Servlet的生命周期

参考网址:https://www.cnblogs.com/fifiyong/p/6390805.html

(一)概念

1.Servlet的生命周期就是从Servlet出现到销毁的过程
2.主要分为5个阶段:加载类–>实例化(为对象分配空间)–>初始化(为对象的属性赋值)–>请求处理(服务阶段)–>销毁
3.其中加载和实例化阶段无法观察,但是初始化、服务、销毁阶段是可以观察的
4.因为都会调用方法,初始化阶段调用init方法,服务阶段调用service方法,销毁阶段调用destory方法

(二)特点

1.默认情况下Servlet是在第一次被访问的时候初始化的,初始化之后就进入服务阶段,关闭服务器的时候就可以销毁
2.也就是说当用户要使用的时候才创建Servlet,如下所示,服务器已经启动,但是没有运行访问的时候就没有进行初始化
在这里插入图片描述
3.也可以在服务器一启动服务的时候就创建好Servlet(这种方式一般不用),要实现这样的操作,只需要在web.xml文件中进行配置

<!-- 只需要在已有的servlet标签中添加load-on-startup这行代码即可 -->
  <servlet>
  	<load-on-startup>1</load-on-startup>
  </servlet>

在这里插入图片描述

二、Servlet的运行机制

关于Servlet和Tomcat的关系?以及为什么有Servlet?
https://blog.youkuaiyun.com/baidu_36583119/article/details/79642407

(一)简便概述

1.当发送一个请求到服务器端的时候,容器(Tomcat)会判断该路径属于哪一个Servlet进行处理(???)
2.Servlet有一个抽象父类"HttpServlet",这个类是一个模板设计模式的类,其中service方法是一个模板方法,当接受到请求之后容器会自动调用该方法判断用户的请求是什么类型
3.然后根据类型来确定需要调用的doXXX方法(钩子方法,有默认实现,子类如果有新的需求可以选择性的重写指定的方法,如果不重写则按默认实现)
4.service方法是一个模板方法,没有必要去重写父类的模板方法,而是根据需求在子类中重写在service方法中被调用的钩子方法

(二)具体实现

1.在WebContent目录下,创建一个index.html,制作一个简单表单

<body>
	<!-- action填的路径名很重要,填错了无法获取到数据 -->
	<form action="/ServletProject/emp" method="post">
		<input type="text" name="username" value="张三">
		<input type="password" name="pwd" value="1234">
		<input type="submit" value="提交">
		<input type="reset" value="重置">
	</form>
</body>

在这里插入图片描述
在这里插入图片描述
2.EmpServlet类中重写doGet()和doPost()方法。本例中主要是实现通过重写doPost方法,获取到index.html中提交的表单数据

public class EmpServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("这是处理Get请求的方法");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//		System.out.println("这是处理Post请求的方法");
		//中文字符出现乱码的问题,可进行设置
		req.setCharacterEncoding("utf-8");
		//可以通过doPost方法获取到客户端提交的数据
		String username = req.getParameter("username");
		String pwd = req.getParameter("pwd");
		System.out.println("用户名:"+username+",密码:"+pwd);
	}
}

3.控制台成功打印出浏览器客户提交的数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值