Java Web 基础之Servlet概念详解(Servlet是什么?主要功能?基础重点运用?)

article/2025/9/19 5:39:26

目录

      • 一、Servlet是什么
        • 1.1 Servlet
        • 1.2 Servlet API
      • 二、Servlet的主要功能
        • 2.1 Servlet的简单运用流程展示
        • 2.2 Servlet API常用功能概览
          • 2.2.1 Servlet
          • 2.2.2 GenericServlet
          • 2.2.3HttpServlet
          • 2.2.4 ServletRequest和ServletResponse
          • 2.2.5 ServletConfig和ServletContext
          • 2.2.5 RequestDispatcher和Filter
      • 三、JSP也是一个Servlet类
        • 3.1JSP(JavaServer Pages)的与众不同
        • 3.2 Servlet的缺点和JSP基本用法
          • 3.2.1指令
          • 3.2.2脚本元素
          • 3.2.3动作
          • 3.2.4无需部署直接访问
      • 求支持


一、Servlet是什么

1.1 Servlet

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,泛指用 Java编写的服务器端程序。在编程过程中也指一切 实现了Servlet接口的类(约定以Servlet结尾命名)。

1.2 Servlet API

JAVA Servlet 作为JAVA EE中Web开发的重要技术之一,也是理解各种Java Web开发框架的重要基础,接下来看一下Servlet-api中主要包含哪些结构:

  • javax.servlet
    -作为servlet API的基础,包含Servlet类基类和Servlet与Servlet容器的契约
  • javax.servlet.annotation
    -包含标注信息,提供简单部署的方式
  • javax.servlet.descrptor
    -包含提供程序化登录Web应用程序的配置信息的类型
  • javax.servlet.http
    -包含HttpServlet,Servlet对Http协议的变体

在这里插入图片描述

二、Servlet的主要功能

2.1 Servlet的简单运用流程展示

Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:

1. 客户端发送请求至服务器端
2. 服务器将请求信息发送至 Servlet
3. Servlet 生成响应内容并将其传给服务器,响应内容动态生成
4. 服务器将响应返回给客户端

Servlet 看起来像是通常的 Java 程序。Servlet 导入特定的属于 Java Servlet API 的包。
一个 Servlet 就是 Java 编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然 Servlet 可以对任何类型的请求产生响应,但通常只用来扩展 Web 服务器的应用程序。
在这里插入图片描述
下面是一个简单实现的代码:

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(urlPatterns = "/myservlet")//注解部署-javax.servlet.annotation部分
public class MyServlet implements Servlet {//Servlet属于javax.servlet核心部分@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}//主要的功能函数-实现Request请求解析,以及进行处理和响应请求@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {String message=req.getParameter("message");res.setContentType("text/html");PrintWriter out=res.getWriter();out.print("<html><head>MyServlet Return Page</head>");out.print("<body><p style='background-color: "+message+"'>"+message+"</p></body></html>");}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}

2.2 Servlet API常用功能概览

简单的类接口和功能概括如下图:(其中HttpServlet在javax.servlet.http中,其余在javax.servlet中)
在这里插入图片描述

2.2.1 Servlet

接口定义了如下5种方法:

//初始化,传入Tomcat实例化的一个ServletConfig进行配置
void init(ServletConfig config) throws ServletException
//主要功能函数-传入Tomcat转发封装好的一个ServletRequest实例,
//和封装好的出口ServletResponse输出即可
void service(ServletRequest req,ServletResponse res)throws ServletException,IOException
//在Servlet类销毁时调用,输出必要信息
void destory()
//以下略
String getServletInfo()
ServletConfig getServletConfig()
2.2.2 GenericServlet

该类是对于Servlet接口的简单实现:
由于直接实现Servlet接口需要实现5个方法,但是一般我们只管service方法,为了减少不必要的实现,使用GenericServlet对其进行简单实现。
继承GenericServlet的类只需要重写需要用到的方法即可

2.2.3HttpServlet

其作为更有效的扩展,是面对Http协议的专业Servlet封装:
对于传入的ServletRequest,该类会自动解析其Http包,然后调用doGet/doPost/doHead等方法,因此在实现继承该类时,只需要实现相应的方法即可,具体如下:

import *@WebServlet(urlPatterns = {"/books"})
public class BookControServlet extends HttpServlet {private static final int serialVersionUID=-123;@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException{List<Book> books=new ArrayList<>();books.add(new Book("isbn-1","YOUR NAME",120));books.add(new Book("isbn-2","MY NAME",100));books.add(new Book("isbn-3","HIS NAME",60));books.add(new Book("isbn-4","HER NAME",250));//给Request添加一些属性req.setAttribute("books",books);req.setAttribute("now",new Date());//转发到另外一个Servlet处理RequestDispatcher rd=req.getRequestDispatcher("/books.jsp");rd.forward(req,res);}
}
2.2.4 ServletRequest和ServletResponse

作为Servlet类(泛指)处理请求和输出的窗口
ServletRequest类包含请求体的所有消息:

+getContentLength():int//返回请求主体字节长度,未知返回-1
+getContentType():String//返回请求主体类型
+getProtocol():String//返回HTTP请求协议名+getParameter(String):String//最常用,返回请求参数值Get请求参数在url有显示,见上(简单实现)

ServletResponse类包含相应请求的方式:

+setContentType(String)//设置响应格式,如"text/html"
+getWriter():java.io.PrintWriter//返回输出接口,具体见上(简单实现)
2.2.5 ServletConfig和ServletContext

ServletConfig作为Servlet类实例时的一个必要的配置信息,由服务器(容器)根据相关配置创建一个实例传入init(ServletConfig),实例如下:

import javax.servlet.*;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "MyServlet", urlPatterns = "/myservlet",initParams = {@WebInitParam(name="config_var_1",value = "value_1"),@WebInitParam(name="config_var_2",value = "value_2")}//初始配置
)
public class MyServlet extends GenericServlet {@Overridepublic void service(ServletRequest req,ServletResponse res)throws ServletException,IOException{ServletConfig servletconfig = getServletConfig();System.out.println(servletconfig.getInitParameter("config_var_1"));System.out.println(servletconfig.getInitParameter("config_var_2"));}
}

在这里插入图片描述
ServletContext则是所有Servlet类的容器信息,包含一个Web应用内所有Servlet的注册信息,在高级操作中可以通过该类实现动态注册Servlet类。(初级略)

2.2.5 RequestDispatcher和Filter

在这里插入图片描述其中Filter需要单独部署,由设计者单独实现一个Filter类,并部署相关拦截条件。
而RequestDispatcher则直接使用即可,见上(简单实现)

三、JSP也是一个Servlet类

3.1JSP(JavaServer Pages)的与众不同

一个JSP页面如下:

<%--//JSP指令--%>
<%@ page import="java.text.DateFormat" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.Enumeration" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%--//纯HTML内容--%>
<html>
<head><title>$Title$</title>
</head>
<style>body {/*EL表达式*/background-color: ${cookie.color.value};}
</style>
<body>
<H1 style="background-color: darkgreen"><a href="books">BOOKS SHOW</a></H1>
hello World!!!<br/><%--//JSP动作--%>
<jsp:include page="extend.html"/><%--//标准标签--%>
<c:set var="x" value="100"/>
<c:out value="${x}"/><%--//JSP脚本--%>
<%DateFormat dateformat = DateFormat.getDateInstance(DateFormat.LONG);String s = dateformat.format(new Date());out.println("<br>Today is " + s + "<br>");
%>
<hr/><%for (Enumeration<String> e = request.getHeaderNames();e.hasMoreElements(); ) {String header = e.nextElement();out.println(header + ": " + request.getHeader(header) + "<br>");}
%>
<hr/><%out.println("BufferSize: " + response.getBufferSize() + "<br>");out.println("Session id: " + session.getId() + "<br>");out.println("Servlet name: " + config.getServletName() + "<br>");out.println("Server info: " + application.getServerInfo());
%>
</body>
</html>

在这里插入图片描述

3.2 Servlet的缺点和JSP基本用法

  1. 在之前的Servlet学习中,不难发现,输出一个html页面已经是非常繁琐,需要写一长串字符串,修改麻烦而且结构混乱。
  2. 其次,Servlet每次修改完,都需要一次编码载入才能使用,在较大规模开发的时候十分不方便。

于是诞生了JSP这种特殊的Servlet,他能够实现自动输出纯html语句,能够动态修改,不用每次修改都编译。

JSP语法简单,能够一定程度上实现前后端分离的需要,具体的内容主要包含三个部分:

3.2.1指令

基础语法是

<%@ introductName attribute1="value1" attribute2="value2"...%>
<%-- 注释:比如导入相关包 --%>
<%@ page import="java.util.Date" %>
<%-- 注释:比如引入标准标签库 --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3.2.2脚本元素

脚本就是用<% … %>包含的Java语句,类比与HTML中的JavaScript脚本,比如:

<%--//JSP脚本--%>
<%//输出当前日期DateFormat dateformat = DateFormat.getDateInstance(DateFormat.LONG);String s = dateformat.format(new Date());out.println("<br>Today is " + s + "<br>");
%>
3.2.3动作

相当于JSP的函数,也可以看成标签具体如下:

<%-- 标准标签,设置变量和输出变量 --%>
<c:set var="x" value="100"/>
<c:out value="${x}"/>
<%-- 导入文件 --%>
<jsp:include page="extend.html"/>
3.2.4无需部署直接访问

直接在浏览器输入url指向JSP文件即可获取JSP动态加载后的页面,如下:
在这里插入图片描述

求支持

作者长期更新分享原创文章,如果觉得本文还算不错的话,请给我一个大大的赞!!!
如果非常赞同这篇文章,请关注我,持续了解更多精彩博文!!!


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

相关文章

什么是 Servlet?

什么是Servlet? Servlet&#xff08;Server Applet&#xff09;&#xff0c;全称Java Servlet&#xff0c;是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据&#xff0c;生成动态Web内容。 狭义的Servlet是指Java语言实现的一个接口&#xff0c;广义的Servl…

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;…