什么是 Servlet?

article/2025/9/19 5:47:32



什么是Servlet?

Servlet(Server Applet),全称Java Servlet,是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

Servlet是java web的基本规范,它是可以处理用户请求和响应的一种机制,基于 web 容器部署。所以
Servlet是由web 容器负责加载、运行、管理的,整个的生命周期都是由容器负责的。

我们只需要开发好Servlet, 并把这个Servlet交给web 容器,这样一来,web 容器就可以去管理这个Servlet,负责加载、创建、调用相关的方法直到整个生命周期的结束。

JavaEE规范中,定义了Servlet接口,我们只需要开发类型去实现这个接口即可。




servlet包

相关的API:
javax.servlet 包
Servlet[接口] -> (init, service, destroy, getServletConfig, getServletInfo)
- GenericServlet[抽象类] 独立于协议的
- HttpServlet [基于应用层的http协议实现的Servlet]
定义了:
doGet -> 处理 get 请求
doPost -> 处理 post请求
doDelete
doPut
doXXX



servlet开发方式

方式一: 直接实现 Servlet 接口 【不推荐】
public class 你的Servlet implements Servlet {
// 重写 5个方法
}




方式二: 继承 GenericServlet 【不推荐】
public class 你的Servlet extends GenericServlet {
//重写 service
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
// …
}
}




方式三:继承 HttpServlet 【推荐的做法】
public class 你的Servlet extends HttpServlet {
//重写 doGet和doPost 方法
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// …
}
}

javax.servlet.http 包\- 这里的类或接口都是与 HTTP 协议有关的\- HttpServletRequest\- HttpServletResponse...



开发和部署一个Servlet基本流程:

  1. 开发一个类,继承 HttpServlet, 重写 doGet 方法
  2. 在 web.xml中,去配置这个 Servlet
  3. 部署到Tomcat容器中
  4. 启动Tomcat
  5. 打开浏览器,发送请求,查看响应



Servlet的生命周期

也就是指Servlet从创建到销毁的全过程。

    1. 当请求来到时,容器会根据请求的 url 来判断由哪个Servlet来响应
    1. 容器会判断当前应用中的Servlet是否使用了 load-on-startup选项,如果有加了此选项的
      Servlet,则根据load-on-startup的值来先后创建这些Servlet,并调用它们的init方法。

当然,对于没有加 load-on-startup选项的servlet,则
判断此Servet实例是否已经存在?

	如果不存在,容器就会创建这个Servlet的实例【只创建一次】,并执行它的init方法,[只执行1次]这个实例并交由容器管理。如果存在,则执行此Servlet的 service 方法【每次请求都会执行1次】
    1. 当容器把某个应用给undeploy时,容器会调用此应用中的所有Servlet的destroy方法

      init()
      service()
      destroy()








Java Web开发,所涉及到的三个层次概念

①容器层次 [可以部署多个 应用]Tomcat - web container [帮助我们创建、管理相关的对象]②应用层次 [可以部署多个 Servlet]ServletContext - 应用上下文[理解成代表整个应用环境]注:一个应用只有一个 ServletContext.③Servlet层次 [coding, 开发的Servlet]Servlet  - 对用户的请求做出处理的代码每一个Servlet都有一个与之对应的 ServletConfig.ServletConfig就是维护对应的Servlet的一些配置信息。



ServletContext 相关的API说明

ServletHttpServletservice(HttpServletRequest req, HttpServletResponse resp) doGet(HttpServletRequest req, HttpServletResponse resp) doPost(HttpServletRequest req, HttpServletResponse resp) HttpServletRequestgetServletContext  =>  ServletContextHttpServletResponseServletContextServletConfiggetInitParameter();



初始化参数

1. 针对 Servlet配置的初始化参数,支持xml和注解两种配置3. 针对应用层面配置的初始化参数,支持xml 配置



有关Servlet的url-pattern的匹配模式

注: 一个 Servlet 可以映射成多个 url-pattern

支持三种匹配模式:

①.  精确匹配如:  /show,  /life,  /hello,  /init/param,   /user/add,  /user/update, ....注:此情况下,getPathInfo的返回值一定是 null②.  模糊匹配, 是一种通配方式如: /*,  /user/* ,   /user/manager/*, ...将来这个*号对应的路径,可以通过 getPathInfo 来获取,从而判断具本的请求操作。③.  扩展名匹配, 也是一种通配方式如: *.do,  *.haha,  *.action 将来这个 * 号对应的路径,可以通过 getServletPath 来获取,从而判断具体的请求操作注:此情况下,getPathInfo的返回值一定是 null



实现 User 的 CRUD 操作

Servlet 的请求参数处理:


方法:
getParameter(String name)  => 通过参数名来获取参数值。
getParameterValues(String name)  => 通过参数名来获取多个值,比如:checkbox, select,..
getParameterNames();    => Enumeration<String>   只返回请求参数名字
getParameterMap();       =>  Map<String, String[]>   返回所有请求参数名及它的值

在 web 开发中,我们的服务端资源可以分成两大类:

一、动态资源,如:Servlet,  JSP, ....这些资源需要JVM去编译和运行二、静态资源,如:图片、css、js、视频、pdf、excel、word、txt、....这些资源不需要JVM的参与.

这些资源如果是放在项目的 webapp 目录下,我们通过浏览器是可以直接访问的。
如果这些资源是放在项目的 webapp/WEB-INF 目录下,则这些资源就被容器给保护起来了,通过
浏览器是不能直接访问,必需要通过 Servlet 跳转。


获取请求参数时需要注意的事项:

不同的表单类型,在后台需要使用不同的方法来获取表单数据其中,如果<form> 的enctype属性是:enctype="multipart/form-data" 时,method必需是 post,  则后台需要通过 request.getPart() 或 request.getParts()   来获取表单数据。enctype="application/x-www-form-urlencoded" 这个值是默认值,这种情况下,method可以是 get或post, 后台则通过 request.getParameter() 或 request.getParameterValues() 来获取表单数据。	注:只要不做文件上传,则enctype就使用默认值。

请求和响应都分为两部份进行传输数据,分别是:

请求头和请求体部
响应头和响应体部
  • 当请求是以 GET 方式提交时,则数据是放在请求头部传输给服务端。
  • 当请求是以 POST 方式提时,则数据是放在请求体部传输给服务端。
  • 备注:通过 request和response 的 setCharacterEncoding 方法只能设置 请求体和响应体 的编码,它不会影响头部的编码。


请求跳转:


  • 把请求从一个Servlet转发到另一个Servlet过程,就叫请求的跳转。
它的API:RequestDispatcher  .forward(request, response)    --> 转发请求【请求没有变化】.include(request, response)    --> 包含另一个资源

  • 如何才能获取 RequestDispatcher对象呢?

      	通过 request.getRequestDispather(url) 方法还可以通过 ServletContext 的方法getServletContext().getRequestDispatcher(url); getServletContext().getNamedDispatcher(servletName);
    





如何在不同的资源之间传递数据?

比如:请求从 AServlet 转发到 BServlet/JSP/HTML 时,如何把 AServlet中的数据“传递”给BServlet?在AServlet中,把对象绑定到 request 范围: request.setAttribute("key", obj)请求转发到BServlet,然后在BServlet中,就可以:request.getAttribute("key")来获取 绑定的 Obj


请求重定向【redirect】

它是指服务端会重新产生新的请求,并且我们在浏览器端会看到新的地址。重定向有什么作用?
重定向的目的是当Web应用升级后,如果请求路径发生了变化,可以将原来的路径重定向到新路径,从而避免浏
览器请求原路径找不到资源。操作:response.sendRedirect();


转发和重定向的区别?

  1. 请求转发时,地址栏中的地址是不变化的,因为请求是同一个;
    重定向时,地址栏中的地址是变化的,因为请求是新的请求。

  2. 请求转发时,可以从 request 中取出之前绑定的 key 值;
    重定向时,不能从 request 中取出之前绑定的 key 值。



请描述一下四种不同的范围各自的边界?

application 可以跨多个 会话[session],
session 可以跨多个请求[request] 
request 可以跨多个页面/资源 [page]
page 

注:不同范围是不可以交叉取值的。

  • application范围 => ServletContext
    setAttribute(String key, Object value);
    getAttribute(String key);
    removeAttribute(String key);

  • session范围 => HttpSession
    setAttribute(String key, Object value);
    getAttribute(String key);
    removeAttribute(String key);

  • request范围 => HttpServletRequest
    setAttribute(String key, Object value);
    getAttribute(String key);
    removeAttribute(String key);

  • page 范围 => PageContext



请求头和响应头

首先了解一下 HTTP 协议HTTP1.0  ->  HTTP1.1   ->  HTTP2.0HTTP 是整个互联网的“基础协议”,也是互联网的支撑。【应用层协议】;它的特点:1.简洁2.无状态 【*****】

意味着服务端不关心每一次的请求的状态。 【高效】
它是一种基于 请求和响应 的协议,基于 TCP/IP 协议。

HTTP 请求和 HTTP 响应消息的格式是类似的,结构如下:初始状态行 + 回车换行符(回车+换行)零个或多个标题行+回车换行符一个空白行,即回车换行符一个可选的消息主体,比如文件、查询数据或查询输出

当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的。如下图是来自于浏览器端的重要头信息:


故屿

当一个 Web 服务器响应一个 HTTP 请求时,响应通常包括一个状态行、一些响应报头、一个空行和文档。从 Web 服务器端返回到浏览器的最有用的 HTTP 1.1 响应报头如下图:


故屿



现在我们分别来看一下 ServletRequest 和 ServletResponse 中有哪些方法是来查看或设置头部信息的:

		1.HttpServletRequestgetHeader(String name)      =>  StringgetDateHeader(String name)  => longgetIntHeader(String name)   => intgetHeaderNames()            => Enumeration<String>getHeaders(String name)2.HttpServletResponsegetHeader(String name)      =>  StringgetHeaderNames()            => Enumeration<String>getHeaders(String name)setHeader(String name, String value);setDateHeader(String name, long t);setIntHeader(String name, int i);



Servlet请求包装和响应包装器

HttpServletRequestWrapper  implements HttpServletRequest
HttpServletResponseWrapper implements HttpServletResponse








Note:
欢迎点赞,留言,转载请在文章页面明显位置给出原文链接
知者,感谢您在茫茫人海中阅读了我的文章
没有个性 哪来的签名!
详情请关注点我
持续更新中

© 2020 10 - Guyu.com | 【版权所有 侵权必究】

http://chatgpt.dhexx.cn/article/LZ9LuriE.shtml

相关文章

servlet新手入门教程-hello world!!!

Servlet 是什么&#xff1f; Java Servlet 是运行在 Web 服务器或应用服务器上的程序&#xff0c;它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。 使用 Servlet&#xff0c;您可以收集来自网页表单的用户输入&#xff0c…

文件服务器鉴权,鉴权和认证服务器

目前登录凭证的方式无非两种: 一个是通过服务器端的session,一个是通过浏览器的cookie. 简而言之:session和cookie 常规的是通过session 步骤: 1,用户在浏览器登录 2,后台鉴权,若登录成功,则把用户信息写入session,servlet自动生成JSESSIONID 返回浏览器; 3,浏览器把JSESSIONID…

接口鉴权实践

我们知道&#xff0c;做为一个web系统&#xff0c;少不了要调用别的系统的接口或者是提供接口供别的系统调用。从接口的使用范围也可以分为对内和对外两种&#xff0c;对内的接口主要限于一些我们内部系统的调用&#xff0c;多是通过内网进行调用&#xff0c;往往不用考虑太复杂…

登录鉴权

注册登录鉴权 1.1.用户注册 前台需要给我们传递用户名、密码、手机号、手机验证码。验证用户前台传过来的数据是否符合规范&#xff0c;我们使用的Hibernate Validator框架实现的服务端表单校验。短信验证码这块&#xff0c;我们采用的阿里的大于短信接口来做的&#xff0c;我…

登陆鉴权方案设计

一、概述 登陆和认证是什么&#xff1f;都是在鉴别用户的身份。如何鉴定识别出这是哪个用户&#xff1f;或者说&#xff0c;有什么方式只有用户自己知道&#xff08;够安全&#xff09;&#xff0c;又能说出这是他自己&#xff1f;于是就有了"用户名密码"、"用…

鉴权html5服务器,前端鉴权知识学习

1、Cookie 指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。 HTTP是一种无状态传输协议&#xff0c;它不能以状态来区分和管理请求和响应。也就是说&#xff0c;服务器单从网络连接上无从知道客户身份。于是给客户端发布一个通行证—cook…

接口鉴权功能的实现

一、背景 随着系统的发展&#xff0c;单体应用逐渐演化成微服务架构。系统微服务化之后&#xff0c;若干个微服务之间会有调用。同个部门内实现的服务会被内部调用&#xff0c;一般风险是可控的。但是如果服务提供给别的部门使用之后&#xff0c;在不了解对方的使用场景&#…

JWT鉴权

文章目录 一、什么是JWT二、JWT能做什么三、JWT介绍以及和传统Session的区别1)基于传统的Session认证2)基于JWT认证 四、JWT的构成和认证流程五、JWT的优缺点 一、什么是JWT JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained …

API签名鉴权设计

鉴权作用 在实际的业务中&#xff0c;必然会存在和其他平台系统进行数据传输。这个时候出于对数据的保密要求&#xff0c;都会对接口&#xff08;API&#xff09;添加鉴权机制&#xff0c;识别调用方的真实身份&#xff0c;对未通过鉴权的请求不做任何业务处理&#xff0c;以帮…

ak和sk怎么认证 海康威视_aksk鉴权

简介 鉴权功能的位置处于基础服务的接入网关中。 1. 认证简介 本鉴权方案是在api层面上进行,通过使用Access Key/Secret Key加密的方法来对验证某个请求的调用者身份。 当接入网关接收到业务调用方的请求时,将使用相同的SK和同样的认证机制生成认证字符串,并与用户请求中包含…

Kafka鉴权

1.SecurityProtocol 参见官方介绍 如图第一个是无需加密&#xff0c;无需鉴权的 第二个是使用sasl鉴权&#xff0c;不加密 该参数需要在服务端进行配置&#xff0c;client端也需要进行相应的配置 2.sasl.mechanism 消息收发的机制&#xff0c;默认为PLAIN。具体介绍参见该文档…

后端认证鉴权

之前我们把redis缓存工具模块做好了、下面结合RBAC权限模型&#xff0c;我们来进行用户的认证鉴权设计。关于RBAC权限模型在之前的文章跟网上都有很多很详细的描述&#xff0c;这里就简单说一下、就是通过用户关联角色&#xff08;多对多&#xff09;、角色关联权限&#xff08…

Postman鉴权

Ok, 今天我们来学习 一下 鉴权 鉴权&#xff08;authentication&#xff09; 是指验证用户是否拥有访问系统的权利。传统的鉴权是通过密码来验证的。这种方式的前提是&#xff0c;每个获得密码的用户都已经被授权。在建立用户时&#xff0c;就为此用户分配一个密码&#xff0c;…

详解 http 鉴权

详解 http 鉴权 【总结分享】10种常用前后端鉴权方法&#xff0c;让你不再迷惘 &#x1f31f;&#x1f31f;&#x1f31f; 前端开发登录鉴权方案完全梳理 &#x1f31f;&#x1f31f;&#x1f31f; 实践出真知&#xff0c;聊聊 HTTP 鉴权那些事 注&#xff1a;此处主要讲的是…

文件服务器鉴权,服务鉴权

使用kmse实现服务的权限校验 通过一个简单的实例说明开发者如何通过kmse进行服务间的权限校验。 一、准备客户端和服务端两个demo 这里演示如何快速实践服务鉴权功能。假如现在有两个微服务 auth-client 和 auth-server&#xff0c;想实现 auth-client 调用 auth-server 时&…

前后端常见的几种鉴权方式

最近在重构公司以前产品的前端代码,摈弃了以前的session-cookie鉴权方式,采用token鉴权,忙里偷闲觉得有必要对几种常见的鉴权方式整理一下。 目前我们常用的鉴权有四种: HTTP Basic Authenticationsession-cookieToken 验证OAuth(开放授权)一.HTTP Basic Authentication 这…

鉴权的4种基本方法

一、基于服务器常出现的问题 Seesions&#xff1a; 每次认证用户发起请求时&#xff0c;服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时&#xff0c;内存的开销也会不断增加。 可扩展性&#xff1a; 由于sessions存放在服务器内存中&#xff0c;伴随而来的是可…

什么是鉴权?一篇文章带你了解postman的多种方式

目录 一、什么是鉴权&#xff1f; 二、postman鉴权方式 一、什么是鉴权&#xff1f; 鉴权也就是身份认证&#xff0c;就是验证您是否有权限从服务器访问或操作相关数据。发送请求时&#xff0c;通常必须包含相应的检验参数以确保请求具有访问权限并返回所需数据。通俗的讲就…

10 分钟带你了解鉴权那些事

前言&#xff1a; 鉴权是自动化测试路上的拦路虎&#xff0c;相信大部分同学都深有体会&#xff0c;今天我们就讲一讲这个鉴权到底是怎么回事。 一、什么是鉴权&#xff0c;为什么要鉴权 鉴权&#xff1a;是指是指验证用户是否拥有访问系统的权利。为什么要鉴权&#xff1a;…

常见的鉴权方式简述

一、什么是鉴权&#xff0c;为什么要鉴权 鉴权&#xff1a;是指验证用户是否有访问系统的权利。 为什么要鉴权 &#xff1a;对用户进行鉴权&#xff0c;防止非法用户占用网络资源&#xff0c;非法用户接入网络&#xff0c;被骗取关键信息 二、鉴权方式 Basic Auth basic au…