Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图解 & 深入浅出 JavaWeb:Servlet必会必知

图解 & 深入浅出 JavaWeb:Servlet必会必知

作者头像
养码场
发布于 2018-08-13 09:52:59
发布于 2018-08-13 09:52:59
7550
举报
文章被收录于专栏:养码场养码场

今天由场子里的养码人子木为大家带来一篇关于servlet的技术专贴,希望与大家交流经验,共同进步!

-1-

Web服务器

从事web开发的人,会很清楚一个东西叫HTTP服务器,比如JEE开发—Tomcat,Jetty,.NET开发—ISS等。

HTTP服务器是使用 HTTP(超文本传输协议) 与客户机浏览器进行信息交流。下面就是HTTP服务器简单交互图:

HTTP服务器是Web服务器的一种,也是开发最常见的,自然还有其他方式进行信息交互,比如FTP文件服务器…

Web服务器是可以向发出请求的浏览器提供文档的程序。其核心过程为

连接过程 — 请求过程 — 应答过程 — 关闭连接

这让我想到了Tomcat架构的一张图:

-2-

Tomcat 简单说几句

如图,Tomcat 包含了核心服务模块:Connector连接模块 和 Container 容器

Tomcat Server 核心是一个 Servlet/JSP Container。

对每一个HTTP请求,过程如下

获取连接

Servlet来分析请求(HttpServletRequest

— 调用其service方法,进行业务处理

— 产生相应的响应HttpServletResponse

关闭连接

如图:

蓝色线指向过程是请求,绿色线指向过程是响应过程。

也就是上面Web服务器核心过程:“连接过程 — 请求过程 — 应答过程 — 关闭连接

-3-

我第一个Servlet

什么是Servlet?(每次都会不停的问自己,这是什么“What”?紧接着应该是什么用“How”吧)

在 JavaEE 6文档中,介绍如下

Servlet 是运行在Web服务器Java小程序。Servlet可以获取并针对Web客户端的请求作出响应。一般情况下,通过HTTP,即超文本传输协议,进行传输通信。”

A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually across HTTP, the HyperText Transfer Protocol.

所以,Servlet 是Web服务器核心工作的抽象

它不单单只是实现HttpServlet,可能实现有FtpServlet(这个我猜的)等。相对较多的Web开发,知道的肯定是HttpServlet。

在 JavaEE 6文档中,是这样介绍HttpServlet

“HttpServlet 提供了一个能被继承后创建一个适应Web网站的Http Servlet的抽象类。”

Provides an abstract class to be subclassed to create an HTTP servlet suitable for a Web site.

光说不练假把式

练一个“Hello,Servlet/JSP World!”:

右键该HelloWorldServletT.java文件 — Run As — Run On Server — 选择Tomcat服务器 — Finish即可

等待片刻,你可看到网页上如下输出。

这就是客户端从HttpServlet获取到的响应:

-4-

分析源码

@WebServlet 注解用于声明一个HttpServlet的配置。

其中,urlPatters = “/helloWorld.html”,urlPatterns复数形式,说明至少一个URL必须被申明。

它和另一个value必须存在一个,但不能同时存在。如果要匹配多个URL路径的话,如下:

下面有个@Override,重写了父类HttpServlet的doGet方法。

我们先看看父类HttpServlet。

HttpServlet是一个抽象类,它提供了以下方法:

— doGet , 服务于 HTPP GET 请求

— doPost , 服务于 HTTP POST 请求

— doPut , 服务于 HTTP PUT 请求

— doDelete,服务于 HTTP DELETE 请求

...

如图:

对于不同的请求,HttpServlet的子类必须相应的实现至少一个方法,通常来说,会是其中一个,这样代码比较清晰。

那父类的doGet方法做了什么工作呢?

这里就简单的获取了下HTTP协议及Http Local信息,然后可以协议是否是1.1,做出分别是405或者400HTTP状态码的响应。

回到HelloWorldServletT.java 这里:

表示该HelloWorldServletT会接受Http GET请求,并OOM到HttpServletRequest,并执行里面的逻辑代码和返回响应。

这里从HttpServletResponse对象中获取到输出打印对象PrintWriter,然后输出了“Hello,Servlet/JSP World!”。

完毕!哦还有一点补充补充补充:

print,这里还好一句话。如果打印个table会很麻烦,因此有一个JSP的东西出现了,是Servlet的HTML化身。

-5-

深入Servlet 具体过程

又回到这个简单的 Get Servlet代码:

这过程总结如下:

— 从浏览器(Client)获取连接”/helloWorld.html

Tomcat Connector模块将请求(Request)传递给 Container模块

Container 模块会做以下事情

—— 分析HTPP请求信息,组装成HttpServletRequest对象

—— 创建新的HttpServletResponse对象

—— 根据路由配置,搜索相应的Servlet,并创建一个线程用于处理本次请求。此时线程会将上面RequestResponse对象的索引传递给Servlet

— 新线程中的Servlet处理逻辑

线程结束后,通过HttpServletResponse对象的PrintWriter,返回浏览器一个信息

过程图如下:

蓝色线指向过程是请求,绿色线指向过程是响应过程,橙色线指向过程是内部处理过程。

有些面试题会这样问:

Servlet是线程安全的吗?

不是,一个servlet实现类只会有一个实例对象,多个线程是可能会访问同一个servlet实例对象的,线程安全问题都是由全局变量及静态变量引起的。

因此,Servlet对象实例化是在以第一次请求此Servlet时,如果访问后,实例对象存在内存中,只会在服务器停止时,它才会消失。

它不会随着各个线程结束而结束。

因此下次访问Servlet时,Servlet Container会搜索相应的Servlet,如果不存在,Container新建相应的Servlet。

这也是我们想要的结果。

-6-

小结

本文要点如下:

1、简单介绍Web服务器 及 Tomcat容器

2、第一个Sevlet的开发及使用

3、深入源码及api介绍使用

4、总结一次请求及响应的真实过程

5、欢迎点击我的博客及GitHub — 博客提供RSS订阅哦

子木

来自

养码场技术

交流1群的养码人

养码人介绍

Java工程师一枚,多个小开源项目发起人,并发编程网专栏技术分享家。酷爱分享写文,曾参与编写《企业级Java EE架构设计精深实践》,坚持更新博客三年,原创博文已达至100多篇。主要分享 Java 后端分布式技术和架构干货及工作上的思考。

做快乐的事,帮助社会与人。

个人微信公众号:BYSocket泥瓦匠(ID:bysocket)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 养码场 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Servlet: 全网最全Servlet详解
从事web开发的人,会很清楚一个东西叫 Web服务器,比如J2EE开—Tomcat,Jetty,.NET开发—IIS等。HTTP服务器是使用 HTTP(超文本传输协议) 与客户机浏览器进行信息交流。
Freedom123
2024/03/29
4120
Servlet: 全网最全Servlet详解
图解 & 深入浅出 JavaWeb:Servlet必会必知
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!
二哥聊运营工具
2021/12/17
3540
图解 & 深入浅出 JavaWeb:Servlet必会必知
Java Web学习总结(五)——Servlet开发(一)
  Servlet是sun公司提供的一门用于开发动态web资源的技术。   Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:   1、编写一个Java类,实现servlet接口。   2、把开发好的Java类部署到web服务器中。   按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet
Java团长
2018/08/06
5790
【JavaWeb】学习笔记——Servlet、Filter、Listenter
用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:   1、编写一个Java类,实现servlet接口。   2、把开发好的Java类部署到web服务器中。
鸡先生
2022/10/29
5200
【JavaWeb】学习笔记——Servlet、Filter、Listenter
图解 & 深入浅出 JavaWeb:Servlet 再说几句
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!
二哥聊运营工具
2021/12/17
2270
图解 & 深入浅出 JavaWeb:Servlet 再说几句
JavaWeb
将CATALINA_HOME/conf/logging.properties文件中的内容修改如下:
星辰xc
2022/05/11
6.3K0
JavaWeb
Java网络02 Servlet开胃酒
在Tomcat初次尝试中,我们搭建了用于测试Servlet和JSP的基本环境。我们现在要转向网络应用的具体开发。 厨师 Web服务器的基本工作方式是请求-处理-回复。请求和回复是在网络上,以HTTP协
Vamei
2018/01/18
5490
Java网络02 Servlet开胃酒
JavaWeb核心篇(1)——HTTP/Tomcat/Servlet
如果说网页是为了展现数据,数据库是为了存储和管理数据,那么JavaWeb就是为了进行逻辑处理
秋落雨微凉
2022/10/25
6960
JavaWeb核心篇(1)——HTTP/Tomcat/Servlet
servlet 理解大全
java创建的对象存放在堆中。java虚拟机会主动察觉不再使用的java对象,内存紧张的时候,垃圾收集器会启动清理垃圾,回收空间
用户2436820
2018/09/05
4290
servlet 理解大全
JavaWeb| 深入servlet技术(一)
今天起正式开始写JavaWeb的专栏,前面的一篇关于HTTP协议的那些东西,也是为这个专栏打基础的,废话不多说,我们今天来认识认识servlet这个家伙!
Python进击者
2019/09/17
7130
JavaWeb| 深入servlet技术(一)
JavaWeb第一讲 Servlet的工作原理及生命周期
由上图可以看出,在Tomcat下有一个Container容器,这个容器有什么作用?它装载了我们所有的JavaWeb项目,当我们每创建一个JavaWeb项目,Tomcat就会把它“装进”Container容器里。而在这个大容器下,它又“装载着”Servlet容器,可是它是我们今天的主角吗?依然不是。
易兮科技
2020/09/26
8720
由浅入深,解析Java Servlet工作过程
如果是post请求的话则编写dopost函数,是get请求的话就编写doget函数。但此时web服务器还不能调用该servlet类,还需在web.xml文件中配置。
谭庆波
2018/08/10
7430
由浅入深,解析Java Servlet工作过程
JavaWeb(一)之细说Servlet
前言   其实javaWeb的知识早就学过了,可是因为现在在搞大数据开发,所以web的知识都忘记了。准备开始慢慢的把Web的知识一点一点的回忆起来,多学一点没有关系,就怕到时候要用的话,什么都不会了。 一、Servlet概述 1.1、Servlet简介   Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API 动态的向客户端输出内容。   Servlet是Java Web的三大
用户1195962
2018/01/18
6560
JavaWeb(一)之细说Servlet
JavaWeb09-Servlet(Java真正的全栈开发)
Servlet 一.Servlet 1. servlet介绍 Servlet 是在服务器上运行的小程序。Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。(它可以做css和html做的所有)这个过程为如图: a. 客户端发送请求至服务器端; b. 服务器将请求信息发送至 Servlet; c. Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求; d. 服务器将响应返回给客户端。 一个 Servlet 就是 Java语言中的一个类,
Java帮帮
2018/03/16
1.1K0
JavaWeb09-Servlet(Java真正的全栈开发)
走进JavaWeb技术世界4:Servlet 工作原理详解
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
Java技术江湖
2019/10/21
5770
[java][Servlet]Servlet 简介-Servlet 到 Spring MVC 的简化之路-Servlet/Tomcat/ Spring 之间的关系
温习一下这个传统的方式,jsp+JavaBeans,这种混合模式很虐心呀,jsp在里面夹杂着,现在大家都直接搞前后端分离了。
landv
2020/08/05
2.2K0
[java][Servlet]Servlet 简介-Servlet 到 Spring MVC 的简化之路-Servlet/Tomcat/ Spring 之间的关系
JavaWeb 入门篇(2)Hello Servlet!!!
1、创建一个maven 项目 添加web框架(将web.xml 换成最新的4.0 后面有完整配置文件) 配置tomcat
宁在春
2022/10/31
2460
JavaWeb 入门篇(2)Hello Servlet!!!
Java Web Servlet (Part A)- Servlet & HttpServlet
Servlet是JavaEE规范的一种,主要是为了扩展Java作为Web服务的功能,统一接口。由其他内部厂商如tomcat,jetty内部实现web的功能。如一个http请求到来,容器将请求封装为servlet中的HttpServletRequest对象,调用init(),service()等方法输出response,由容器包装为httpresponse返回给客户端的过程。
RiemannHypothesis
2022/09/26
6520
Java Web Servlet (Part A)- Servlet & HttpServlet
Servlet
通过前面一系列的博客的梳理,学习了一下Java基础的编程知识,从我自己的感觉上来说,Java与c++的差距并不是很大,Java将c++做了更进一步的抽象,同时丢弃了c++中一些容易出错和难懂的部分。Java的基础语法比起c++来说要简单很多。但是Java与c++一样,不能光学基础语法,还得从应用角度来学习它,使用它来做一些真真的项目。 从现在开始博客内容从Java的基础过渡到了Java2E的学习
Masimaro
2019/10/14
1.1K0
天下风云出我辈:Servlet
让我们坐上时光机,回到上个世纪90年代的中叶。C语言稳坐编程语言江湖的头把交椅,C++也羽翼渐丰。彼时在圣克拉拉的某个咖啡馆里出现了一位其貌不扬的少年。谁都不会想到这个手持盒子,靠嵌入式起家的孩子会成为日后十年、二十年乃至更长的时空中,搅动互联网江湖的重要人物。他的名字是——Java。
果冻虾仁
2021/12/08
4710
天下风云出我辈:Servlet
相关推荐
Servlet: 全网最全Servlet详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档