Servlet(二):初识Servlet

浅谈Servlet(二)Servlet生命周期 在Java中,生命周期指的是一个对象从创建到销毁的过程。 而Servlet的生命周期指的就是Servlet从创建到销毁的过程。 阅读详情

在手动写完一个Servlet小例子后,是不是有很多疑问,接下来会为大家详细介绍Servlet的知识。

1、什么是Servlet

是在服务器上运行的小程序。一个servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问驻留在服务器内存里的servlet程序。

2、为什么要用Servlet

web服务器只能处理静态资源的请求,需要事先将静态页面写好,不能处理动态资源请求(动态资源请求主要是一些需要计算或数据操作而生产的页面),在早期为了解决这一问题,使用了CGI程序(Common Gateway Interface通用网关接口)来扩展web服务器的功能,但是其性能较差,可移植性差,慢慢被弃用。

Servlet的出现很好的解决使用CGI出现的问题。第一,Servlet可移植性强,Servlet是用Java语言实现的,具备一处编写处处运行的特点。第二,Servlet可扩展性强,可使用Java的所有类库,并且可以通过sockets和RMI机制(Remote Method Invocation远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法,这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。)与数据库或其他软件进行交互。第三,Servlet性能更好,Servlet只需web服务器加载一次,而且可以在不同请求之间保持服务;相反,每一次对CGI脚本的请求,都会使Web服务器加载并执行该脚本。一旦这个CGI脚本运行结束,它就会被从内存中清除,然后将结果返回到客户端。CGI脚本的每一次使用都会造成程序初始化过程的重复执行。

3、编写Servlet的步骤

A.编写一个Java类,继承HttpServlet,重写doGet()方法和doPost()方法。

B.配置web.xml文件。

C.编写jsp页面。

D.启动容器,访问servlet,在浏览器验证。

4、Servlet的执行流程

5、Servlet的生命周期

Servlet的生命周期是指Servlet容器如何创建Servlet对象,如何对其进行初始化,如何调用Servlet对象处理请求,如何销毁Servlet对象的整个过程。

主要分为四个阶段:(1)实例化;(2)初始化;(3)调用;(4)销毁。

A.实例化阶段。Servlet实例会在以下两种情况下创建:一是在Servlet容器收到request请求后创建;二是在Servlet容器启动时创建,需要在web.xml中配置<load-on-startup>1</load-on-startup>标签,中间的值是一个大于0的整数,值越小优先级越高。

B.初始化阶段。Servlet实例化后,会调用init(ServletConfig config)方法,其中ServletConfig对象是一个成员变量,是Servlet容器传递进来的,init方法只会执行一次。

C.调用阶段。servlet容器收到请求后,调用servlet对象的service()方法,再将处理结果返回给浏览器。

D.销毁阶段。对server执行stop操作或将服务关闭时,调用servlet对象的destroy方法,且只会执行一次。

6、实操验证

新建一个Maven web项目,写好servlet,配置好web.xml,写一个简单的jsp页面,可以来实际验证刚才的分析。

A.新建两个Java类,继承HttpServlet

/**
 * servlet的生命周期
 * @author 小川94
 * @date 2018年6月4日
 */
public class LifeServlet extends HttpServlet {
    
    private static final long serialVersionUID = 1L;
       
    
    public LifeServlet() {
        System.out.println("LifeServlet:执行构造方法...");
    }
    
    @Override
    public void init() throws ServletException {
        System.out.println("LifeServlet:执行init方法...");
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 打印日志
        System.out.println("LifeServlet:处理Get请求...");
        // 设置服务器返回的数据类型
        response.setContentType("text/html");
        // 获取一个输出流
        PrintWriter out = response.getWriter();
        // 输出数据,将数据发送到浏览器
        out.println("<h1>Hello Servlet!</h1>");
        // 关闭流
        out.close();
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 打印日志
        System.out.println("LifeServlet:处理Post请求...");
        // 对从浏览器获取的数据设置编码格式
        request.setCharacterEncoding("UTF-8");
        // 获取页面传入的数据
        String name = request.getParameter("name");
        System.out.println(name);
        // 设置服务器返回的数据类型
        response.setContentType("text/html;charset=UTF-8");
        // 获取一个输出流
        PrintWriter out = response.getWriter();
        // 输出数据,将数据发送到浏览器
        out.println("<h1>Hello "+name+"!</h1>");
        // 关闭流
        out.close();
    }

    @Override
    public void destroy() {
        System.out.println("LifeServlet:执行destroy方法...");
    }

}
public class LifeServlet2 extends HttpServlet {
    
    private static final long serialVersionUID = 1L;
       
    
    public LifeServlet2() {
        System.out.println("LifeServlet2:执行构造方法...");
    }
    
    @Override
    public void init() throws ServletException {
        System.out.println("LifeServlet2:执行init方法...");
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 打印日志
        System.out.println("LifeServlet2:处理Get请求...");
        // 设置服务器返回的数据类型
        response.setContentType("text/html");
        // 获取一个输出流
        PrintWriter out = response.getWriter();
        // 输出数据,将数据发送到浏览器
        out.println("<h1>Hello Servlet!</h1>");
        // 关闭流
        out.close();
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 打印日志
        System.out.println("LifeServlet2:处理Post请求...");
        // 对从浏览器获取的数据设置编码格式
        request.setCharacterEncoding("UTF-8");
        // 获取页面传入的数据
        String name = request.getParameter("name");
        System.out.println(name);
        // 设置服务器返回的数据类型
        response.setContentType("text/html;charset=UTF-8");
        // 获取一个输出流
        PrintWriter out = response.getWriter();
        // 输出数据,将数据发送到浏览器
        out.println("<h1>Hello "+name+"!</h1>");
        // 关闭流
        out.close();
    }

    @Override
    public void destroy() {
        System.out.println("LifeServlet2:执行destroy方法...");
    }
}

B.配置web.xml文件

<servlet>
    <servlet-name>LifeServlet2</servlet-name>
    <servlet-class>servlet.LifeServlet2</servlet-class>
    <!-- 设置装载优先级 -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>LifeServlet2</servlet-name>
    <url-pattern>/LifeServlet2</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>LifeServlet</servlet-name>
    <servlet-class>servlet.LifeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LifeServlet</servlet-name>
    <url-pattern>/LifeServlet</url-pattern>
  </servlet-mapping>

C.编写jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第一个servlet例子</title>
</head>
<body style="margin:50px;">

<!-- 演示get请求 -->
<a href="LifeServlet">Get请求</a>

<!-- 演示post请求 -->
<form action="LifeServlet" method="post">
    <label>姓名</label>
    <input type="text" name="name"/>
    <br/>
    <input type="submit" value="提交"/>
</form>

<br/>
<br/>

<!-- 演示get请求 -->
<a href="LifeServlet2">Get请求</a>

<!-- 演示post请求 -->
<form action="LifeServlet2" method="post">
    <label>姓名</label>
    <input type="text" name="name"/>
    <br/>
    <input type="submit" value="提交"/>
</form>


</body>
</html>

我们进行了两次实验,一次是没有在web.xml文件里添加<load-on-startup>1</load-on-startup>,处理页面请求时,是调用哪个servlet才会去装载哪个servlet,然后进行一系列的操作。

第二次是为LifeServlet2添加了<load-on-startup>1</load-on-startup>标签,在Tomcat启动的时候,Servlet容器就装载了LifeServlet2并初始化,然后根据浏览器的请求来执行对应的方法,最后再销毁。


文章首发于我的个人公众号:悦乐书。喜欢分享一路上听过的歌,看过的电影,读过的书,敲过的代码,深夜的沉思。期待你的关注!

公众号后台输入关键字“Java学习电子书”,即可获得12本Java学习相关的电子书资源,如果经济能力允许,还请支持图书作者的纸质正版书籍,创作不易。

运放+三极管恒流源电路设计实战:从原理到仿真一步到位(附Multisim文件) 本文详细解析了运放与三极管构建恒流源电路的核心原理,重点阐述了负反馈机制如何实现精准的电流控制。通过Multisim仿真实战,从电路搭建、参数计算到负载调整率与动态响应分析,一步步指导设计过程,并提供常见故障的调试技巧与PCB设计要点,帮助工程师从理论平稳过渡到可靠实践。 阅读详情

相关推荐

ArcGIS通过已知坐标点转面(通过excel文件,有工具可批量生成面要素)

通过使用ArcGIS中的工具,将坐标点XY数据转换成可视化的点线面矢量数据,更加方便快捷有效的获取对应信息

qq_41046162的博客 3万+

【Servlet】(二)初识Servlet

三个Map 第一个Map 获取文本参数的集合 (name属性的值为key,value的值为value,注意的是此value是同name的value值集合,所以应用String[]数组)Map map = request.getParameterMap();例如 Set set = map.keySet(); Iterator it = set.iterator(); whil

Eoumer 547

SDIO协议

SDIO协议1 概述  SDIO,全称:Secure Digital Input and Output ,即安全数字输入输出接口。2 特点①与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。②与较早的多媒体卡系统规格版本全兼容(向前兼容)。③与SD存储卡规格版本2.0全兼容。④与SD I/O卡规格版本2.0全兼容:支持两种不同的数据总线模式:1位(默认)和4

Let the development board fly! 3万+

Servlet的生命周期

servlet的生命周期 Servlet 生命周期指的是,Servlet 对象的创建、Servlet 对象的初始化、Servlet 对象服 务的执行,及最终 Servlet 对象被销毁的整个过程。 servlet生命周期图: Servlet 的整个生命周期过程的执行,均由 Web 服务器负责管理,程序员无法控制其 执行流程。但程序员可以获取到 Servlet 的生命周期时间点,并可以指定让 Servlet 做一些业务相关的事情。 示例代码: package com.monkey1024.servlet;

陌影的博客 236

Dify+firecrawl:一个超好用的网页转Markdown API,打造你的第一个能检索爬虫RAG知识库的聊天机器人

Firecrawl是一个超简单的API服务——你扔给它一个URL,它就能把整个网站(包括子页面!)的内容自动抓下来,并且转换成干净、易读的Markdown格式。不用配置网站的站点地图,不用写爬虫规则,API调一下,数据直接到手。接下来我们一起本地部署吧!

2501_91673550的博客 2992

解决 python2.7中 ImportError: No module named Crypto.Signature

我的解决办法,先查看有没有安装 pip,直接执行pip 回车 没有出现null什么的就安装了,如果没有安装去其他博客哪里看一下,正常情况是默认就有的,然后使用。发现我自己也不会啊,就百度看看,想着网上的解决方法一大片,但是都是废话,能用的没有几个,而且能安装的没有几个。这个里面的python2、3就是系统里面的python版本,直接跟我这样就可以了除非版本不一样,也就是没有这个版本。就可以使用了,第一个应该是卸载之前的,然后重新安装,我的就是这样解决的。就比如我的,我现在使用的 python2.7。

记录一下 1611

Servlet简介及其应用

ServletConfig (了解) ServletConfig表示的是Servlet的配置信息 ServletConfig对象和servlet配置信息()一一对应 当服务器(tomcat)实例化Servlet时,会根据servlet配置信息创建ServletConfig对象 注意 配置初始化参数需要写在<servlet>…</servlet>中 <servl...

ly823260355的博客 3049

基于决策树的英雄联盟比赛胜负预测(含完整代码)

在代码中设置随机种子(例如 RANDOM_SEED = 2024)的主要目的是为了确保每次运行代码时,随机过程的结果是一致的。通过绘制不同参数组合下的准确率图,直观地展示了参数对模型性能的影响,帮助读者更好地理解和选择合适的参数。通过设置相同的随机种子(伪随机数),可以确保每次运行代码时,随机数生成器生成的随机数序列是相同的。如果在开发过程中遇到问题,设置固定的随机种子可以帮助你更容易地定位问题,因为每次运行代码时的数据和结果都是一样的。在科学研究和实验中,结果的可重复性是非常重要的。

oisflo的博客 1920

Java Servlet学习笔记(二)初识Filter

Java Filter在服务容器启动时就会被加载,其加载顺序与web.xml中注册的顺序一致。 Servlet3.0以下,需要使用以下定义在web.xml中注册。 Servlet 3.0以上,可以直接在类文件中以注释方式注册Filter. @WebFilter(f

Chris Mao的专栏 1125

汇川Easy系列PLC系统PID指令编程应用(增量型)

增量式PIDS7-1200/1500增量式PID(输出归一化、支持PWM输出)_西门子1200pid算法公式-优快云博客文章浏览阅读1k次。本文介绍了S7-1200/1500 PLC中增量式PID算法的应用,包括输出归一化和PWM输出。通过详细解析,阐述了PID输出如何限制在0.0-1.0之间,并且如何将PID输出与PWM占空比关联,适用于温度等控制场景。

RXXW_Dor的博客 1427

Python 爬虫进阶:爬取 APP 数据(Charles 抓包 + Requests)

本文详细介绍了APP数据爬取的完整技术方案。首先通过Charles抓包工具配置HTTPS代理和证书,解析APP通信协议;然后分析请求参数、反爬机制和动态签名生成规则;接着使用Python的Requests库实现模拟请求、分页爬取和数据存储;最后针对证书问题、Token失效等常见问题提供解决方案。文章强调抓包分析、参数逆向和请求模拟三大核心技术,同时提醒开发者需遵守法律法规,合理控制爬取频率。该方案适用于移动端数据采集场景,为无法直接获取网页数据的情况提供了有效解决方案。

2503_91057718的博客 2121

初识Servlet

初识Servlet 什么是servlet? servlet是个框架,用来帮助后端工程师开发Java API。 如何使用Servlet去创建一个项目? 使用软件:IDEA 第一步:配置maven; 点击File->Settings->搜索Maven并出现如下界面: 第二步:点击File->new->project->Maven; 完了以后,点击next; 出现success代表你已经成功一半了,如果是failure那么(删除本地仓库中的内容、关闭防火墙和安全软件,点击

qq_45841205的博客 3068

QGraphicsView通过鼠标操作来绘制图元

在Visio和MindManager等类似的图元操作软件中,很多时候我们会通过鼠标操作来添加自定义的图元。这里就介绍一下如何在QT的图形视图框架中通过鼠标绘制来添加图元。

yang1fei2的博客 3577

都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet

不得不说,Servlet 确实是一门古老的技术了,现在很少有公司直接使用 Servlet 来写项目了,大家都在用 SpringMVC-Spring-MyBatis / SpringBoot 做开发了,那么都2023年了,Servlet 还需要学习吗?真的有必要吗?本文将对 Servlet 做深入的探讨。

zhangxia_的博客 2万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Servlet——初识Servlet

Java的各种框架虽然好,但是这些框架底层的实现技术,才是真正核心的东西。框架会随着时间更迭,底层核心却永远不变。学习各种框架的时候,不能忘记实现它们的核心技术。最近我会花时间重温Serlvet的知识,这对理解SpringMVC和SpringBoot等框架的底层原理有很大的帮助。学习Servlet不免涉及到前后端交互的一些功能,所以在前端部分我也会简要回顾一下“曾经”的JSP,尽管现在用Sprin...

Stay Hungry Stay Foolish 1910

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Servlet 初识

ServletServlet 是什么?第一个 Servlet 程序: Hello World1.创建项目2.引入依赖3.创建目录4.编写代码5.打包程序6.部署程序7.验证程序简化部署方式安装 Smart Tomcat 插件配置 Smart Tomcat 插件访问出错情况404405500空白页面无法访问此网站总结 Servlet 是什么? 第一个 Servlet 程序: Hello World 1.创建项目 使用 IDEA 创建一个 Maven 项目 新建项目 → Maven 输入项目名称,并且选

一朵花花 1061

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

初识Tomcat、Maven、Servlet

认识Tomcat前言一、了解Tomcat?二、使用Tomcat1.检查Tomcat是否启动成功?2.简单使用Tomcat1.使用Tomcat部署静态页面2.使用Tomcat部署动态页面三、了解Maven四、使用Maven总结 前言 什么是Tomcat? Tomcat是一种HTTP服务器,Java语言中最常用的服务器。Tomcat对于HTTP协议进行了封装。 一、了解Tomcat? 首先我们在官网下载Tomcat,之后安装,在文件夹中打开就是 先介绍一下这里面的内容: 1.bin :存放一起启动停止脚本,

weixin_51601437的博客 885

servlet初识,认识service()方法

Servlet简介 什么是servlet 概念:JavaServlet是运行在 Web服务器或应用服务器上的程序,它是作为来自 Web浏览器或其他 HTTP客户端的请求和 HTTP服务器上的数据库或应用程序之间的中间层。 定位:Java Servlet用Java编写的服务器端程序(web application)。作用:其主要功能在于交互式地浏览和修改数据,生成动态Web内容。 理解:狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet...

想要成为大佬的彪彪 2941

Servlet初识

一、Servlet是什么 (1)Servlet:Server Applet,全称java servlet。java编写的服务端程序,交互式的浏览和修改数据,生成动态web内容。狭义的Servlet是java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类。一般人们理解为后者。 (2)Servlet运行在支持java的应用服务器中。Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的web服务器。 (3)Servlet的工作模式:

全栈攻城狮JSON的博客 286

Java Web基础知识之Servlet(1):初识Servlet

写Web应用时,直接用的Spring框架,没有接触过Servlet,于是遇到问题不知道根本原因,所以还是学一下吧! 一、 什么是Servlet 看见这个词我就晕,到底是什么?我试着说清楚,从大的方面来说,它是一个在Web中生成动态内容的标准,即是用于开发Web应用程序的基本技术;从小的方面来说它是Java提供的一个接口Servlet,我们也把实现这个接口的类称为Servlet。它和CGI相对,

lmy86263的博客 6725

JavaWeb—>Servlet初识

JavaWeb—>Servlet初识 一.认识Tomcat 1.Tomcat的安装 安装Tomcat 2.Tomcat的基本使用 <1>双击 bin\startup.bat 启动 <2>请求 http://127.0.0.1:8080/,访问的是 webapps\ROOT\ 文件夹下的应用 <3>webaaps下的文件结构 小结: Tomcat 文件夹下的 webapps,是 web applications 的简称,意思是用来存放 web 应用的文件夹。文件

qq_45704528的博客 701

初识 Servlet

初识 Servlet1. 什么是 Servlet?2. 1. 什么是 Servlet? Servlet为创建基于 web 的应用程序提供了基于组件、独立于平台的方法,可以不受 CGI 程序的性能限制。Servlet 有权限访问所有的 Java API,包括访问企业级数据库的 JDBC API。 2. ...

weixin_47230102的博客 413
上一篇: Servlet(一):Hello Servlet
下一篇: Servlet(三):获取表单数据、解决乱码和报错问题
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值