当前位置: 首页 > news >正文

java-初识Servlet,Tomcat,JDBC

文章目录

  • 前言
  • 一、Servlet
      • Servlet 生命周期
      • Servlet 实例
      • Servlet 过滤器
  • 二、Tomcat
      • JDBC
      • JDBC连接数据库实例
  • 总结


前言

java入门须知的重要概念/名词/技术 等

一、Servlet

Servlet是Java Web开发中的一个核心组件,它是基于Java语言编写的服务器端程序,可以接收Web容器(如Tomcat)发送过来的HTTP请求,并向客户端发送HTTP响应。Servlet通常用来处理动态Web页面、Web表单数据、管理会话(session)等任务。

实际上,Servlet的主要用途是实现动态Web页面,它可以根据请求参数、表单数据、Session状态等动态生成HTML页面内容,并将结果返回给客户端。Servlet还可以处理上传文件、验证用户身份、调用数据库等操作。

使用Servlet可以帮助开发者解决很多Web开发中的问题,如实现动态页面、保证数据交互的安全性、提高Web应用的可扩展性和可维护性等。此外,Servlet的开放式架构使得它与其他Java技术如JSP、JDBC等无缝集成,使得开发更加快捷、高效。
在这里插入图片描述

Servlet 生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

Servlet 初始化后调用 init () 方法。
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 销毁前调用 destroy() 方法。
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

Servlet 实例

// 导入必要的 Servlet 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;// 继承 HttpServlet 类
public class MyServlet extends HttpServlet {// 处理 GET 请求方法public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 设置响应内容类型response.setContentType("text/html");// 实际的逻辑是在这里PrintWriter out = response.getWriter();out.println("<h1>Hello World</h1>");}// 处理 POST 请求方法public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

这个 Servlet 会处理 HTTP GET 和 POST 请求,并在浏览器中输出 “Hello World”。要运行此 Servlet,您需要编写一个 web.xml 文件并将其部署到一个 Servlet 容器中。以下是一个示例 web.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><servlet><servlet-name>MyServlet</servlet-name><servlet-class>MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/myservlet</url-pattern></servlet-mapping></web-app>

上面代码,我们将 Servlet 映射到 /myservlet URL,这意味着当用户访问 http://localhost:8080/myservlet 时,Servlet 将被调用。

Servlet 过滤器

Servlet 过滤器是一个 Java 程序组件,它可以拦截 Http 请求和响应,以便在处理请求之前或响应之后执行一些操作。它是基于 Java Servlet API 的一种功能,可以用于处理请求、授权、记录,转换内容或响应,以及在请求或响应被发送到 Servlet 之前或之后执行其他操作。

Servlet 过滤器提供了一种简单而强大的方法来修改或增强 HTTP 请求和响应,可以用来实现一些常见的功能,例如:

  • 认证和授权:过滤器可以对请求进行身份验证和权限检查,以保护应用程序免受未经授权的访问。
  • 数据压缩:通过在响应中添加压缩头,可以减少数据传输量,从而提高应用程序的性能。
  • 日志记录:可以使用过滤器记录请求和响应的详细信息,以进行监视、故障排除和分析。
  • 数据转换:可以使用过滤器将请求或响应转换为其他格式,例如将 XML 生成为 JSON 或反之。

Servlet 过滤器可以在 WEB.XML 文件中配置,并通过 Java Servlet API 中提供的 Filter 接口来实现。此外,开发人员还可以自定义过滤器来满足其特定的需求。

二、Tomcat

Tomcat 是一个 Java Web 应用服务器,而 Servlet 是 Java Web 开发的重要组件之一,用于处理客户端的 HTTP 请求和响应,Tomcat 作为一个 Web 服务器,可以通过 Servlet 容器来管理和运行 Servlet,因此 Tomcat 中集成了 Servlet 容器,可以使用 Servlet 直接开发 Web 应用程序,实现对客户端 HTTP 请求的处理和响应。简而言之,Tomcat 与 Servlet 是一种相互依赖的关系。

在这里插入图片描述

JDBC

JDBC是Java Database Connectivity的缩写,是Java平台上关于数据库访问的一种标准。JDBC API是Java应用程序和各种关系数据库之间进行连接和交互的标准API。使用JDBC API,Java应用程序可以执行诸如查询、插入、更新和删除等各种数据库操作。

JDBC API由两部分组成:JDBC Driver API和JDBC Manager API。JDBC Driver API提供了连接数据库和执行SQL语句的方法,不同的数据库需要使用不同的JDBC驱动程序。JDBC Manager API则提供了管理JDBC驱动程序、连接数据库及其元数据的方法。

JDBC的工作方式是通过Java应用程序中的JDBC驱动程序来连接到数据库。JDBC驱动程序是一个软件组件,作为Java应用程序和数据库之间通信的媒介。JDBC驱动程序可以使用不同的连接方式来连接不同的数据库,例如直接连接、间接连接、分布式连接等。常用的JDBC驱动程序包括JDBC-ODBC桥、纯Java驱动程序和本地协议驱动程序等。

使用JDBC API进行数据库操作的基本步骤如下:

  1. 加载并注册JDBC驱动程序。

  2. 创建一个数据库连接。

  3. 创建一个Statement对象,用于执行SQL语句。

  4. 执行SQL语句,得到一个ResultSet对象,用于处理查询结果。

  5. 处理ResultSet对象中的数据。

  6. 关闭ResultSet对象、Statement对象和数据库连接。

JDBC是Java应用程序中访问关系型数据库的一种标准API,它简化了Java编程人员对数据库的访问,为Java应用程序与各种关系型数据库之间提供了一个标准接口。

JDBC连接数据库实例

下面是一个使用 JDBC 连接 MySQL 数据库的示例代码:

import java.sql.*;public class JDBCTest {public static void main(String[] args) throws SQLException {Connection connection = null;Statement statement = null;ResultSet resultSet = null;try {// 加载MySQL JDBC驱动程序Class.forName("com.mysql.jdbc.Driver");// 连接到数据库String url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";connection = DriverManager.getConnection(url, username, password);// 执行查询String sql = "SELECT * FROM mytable";statement = connection.createStatement();resultSet = statement.executeQuery(sql);// 处理结果集while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println("id = " + id + ", name = " + name);}} catch (ClassNotFoundException e) {e.printStackTrace();} finally {// 关闭资源if (resultSet != null) {resultSet.close();}if (statement != null) {statement.close();}if (connection != null) {connection.close();}}}
}

上述代码中,先加载 MySQL 的 JDBC 驱动程序,然后通过 DriverManager.getConnection() 方法连接到指定的数据库。接着执行一个查询,将结果集存储在 ResultSet 对象中,并逐行遍历结果集来获取数据。最后,需要关闭连接、语句和结果集等资源。


总结

我们在此文章知道了servlet 是基于Java语言编写的服务器端程序,可以处理Web容器(如Tomcat)发送过来的HTTP请求,也写了实例代码,另外servlet的过滤器,可以用来处理请求前与请求后的一些逻辑。;接着简单了介绍了tomcat,知道Tomcat 作为一个 Web 服务器,可以通过 Servlet 容器来管理和运行 Servlet;最后介绍jdbc,以及jdbc连接数据库的实例代码。

相关文章:

java-初识Servlet,Tomcat,JDBC

文章目录 前言一、ServletServlet 生命周期Servlet 实例Servlet 过滤器 二、TomcatJDBCJDBC连接数据库实例 总结 前言 java入门须知的重要概念/名词/技术 等 一、Servlet Servlet是Java Web开发中的一个核心组件&#xff0c;它是基于Java语言编写的服务器端程序&#xff0c;…...

SpringBoot+mybatis+pgsql多个数据源配置

一、配置文件 jdk环境&#xff1a;1.8 配置了双数据源springbootdruidpgsql&#xff0c;application.properties配置修改如下&#xff1a; #当前入库主数据库 spring.primary.datasource.typecom.alibaba.druid.pool.DruidDataSource spring.primary.datasource.driver-class…...

视频汇聚/视频监控管理平台EasyCVR接入海康SDK协议后无法播放该如何解决?

开源EasyDarwin视频监控/安防监控/视频汇聚EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#…...

MQ消息队列(主要介绍RabbitMQ)

消息队列概念&#xff1a;是在消息的传输过程中保存消息的容器。 作用&#xff1a;异步处理、应用解耦、流量控制..... RabbitMQ&#xff1a; SpringBoot继承RabbitMQ步骤&#xff1a; 1.加入依赖 <dependency><groupId>org.springframework.boot</groupId&g…...

2023年7月天猫糕点市场数据分析(天猫数据怎么看)

烘焙食品行业是近几年食品领域比较火热的赛道之一&#xff0c;随着居民饮食结构的变化&#xff0c;人均消费水平的上升&#xff0c;蛋糕、面包等烘焙糕点越发成为消费者饮食的重要组成部分。同时&#xff0c;在烘焙糕点市场中&#xff0c;老品牌不断推新迭变&#xff0c;新品牌…...

开源双语对话语言模型 ChatGLM-6B 本地私有化部署

本文首发于&#xff1a;https://www.licorne.ink/2023/08/llm-chatglm-6b-local-deploy/ ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;基于 General Language Model (GLM) 架构&#xff0c;具有 62 亿参数。结合模型量化技术&#xff0c;用户可以在消费级…...

Zabbix 5.0 媒体介质 邮箱配置例子

QQ企业邮箱 参考&#xff1a;zabbix 腾讯企业邮箱配置图_harveymomo的博客-CSDN博客...

基于Red Hat Enterprise Linux 7操作系统的PostgresSql15的备份恢复(实践笔记)

零、前言 本文是基于阿里云ECS服务器进行的实践操作&#xff0c;操作系统版本&#xff1a;Red Hat Enterprise Linux 7 PG数据库版本&#xff1a;PostgresSql 15 PG安装方式&#xff1a;yum 由于本人新接触pg数据&#xff0c;本次也是出于好奇&#xff0c;就对pg数据库的pg_du…...

AMEYA360:类比半导体推出小尺寸低功耗仪表放大器INA103和INA104

致力于提供高品质芯片的国内优秀模拟及数模混合芯片设计商上海类比半导体技术有限公司(下称“类比半导体”或“类比”)宣布推出小尺寸、低功耗、高性能、零漂移仪表放大器INA103和INA104。该系列产品仅需要一个外部电阻即可设置1到10000的增益&#xff0c;静态电流仅为1.3mA并具…...

【Ubuntu20.04】安装gcc11 g++11, Ubuntu18.04

#查看当前使用的gcc版本命令: gcc -v #更新软件源指令&#xff1a; sudo apt-get update #更新软件指令&#xff1a; sudo app-get upgrade# 添加相应的源 sudo add-apt-repository ppa:ubuntu-toolchain-r/test #更新软件源指令&#xff1a; sudo apt-get update# 卸载已有gcc…...

vim系列之常用命令

一.欢迎来到我的酒馆 在本章节介绍vim编辑器常用命令。 目录 一.欢迎来到我的酒馆二.vim常用命令 二.vim常用命令 2.1vim编辑器常用命令&#xff1a; i: 在光标位置处插入字符。o: 在下一行开始位置插入一行。yy: 复制光标所在的行p: 在光标位置粘贴剪切板内容。...

Scikit-Learn中的特征选择和特征提取详解

概要 机器学习在现代技术中扮演着越来越重要的角色。不论是在商业界还是科学领域&#xff0c;机器学习都被广泛地应用。在机器学习的过程中&#xff0c;我们需要从原始数据中提取出有用的特征&#xff0c;以便训练出好的模型。但是&#xff0c;如何选择最佳的特征是一个关键问…...

Python之动态规划

序言 最近在学习python语言&#xff0c;语言有通用性&#xff0c;此文记录复习动态规划并练习python语言。 动态规划&#xff08;Dynamic Programming&#xff09; 动态规划是运筹学的一个分支&#xff0c;是求解决策过程最优化的过程。20世纪50年代初&#xff0c;美国数学家…...

[ES]二基础 |

一、索引库操作 1、mapping属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; 1)type&#xff1a;字段数据类型&#xff0c;常见的简单类型有&#xff1a; ①字符串&#xff1a;text(可分词的文本)、keyword&#xff08;精确值&#xff0c…...

vscode vue3自定义自动补全

敲代码多了&#xff0c;发现重发动作很多&#xff0c;于是还是定义自动补全代码吧——懒是第一生产力&#xff01; 1&#xff0c;Ctrl Shift P打开快捷命令行&#xff1a;找到下面这个 2&#xff0c;然后找到ts&#xff1a; 里面给了demo照着写就行 // "Print to conso…...

Spring Cloud + Spring Boot 项目搭建结构层次示例讲解

Spring Cloud Spring Boot 项目搭建结构层次示例讲解 Spring Cloud 项目搭建结构层次示例Spring Cloud示例&#xff1a; Spring Boot 项目搭建结构层次讲解Spring Boot 项目通常按照一种常见的架构模式组织&#xff0c;可以分为以下几个主要层次&#xff1a;当构建一个 Spring…...

使用cgroup工具对服务器某些/全部用户进行计算资源限制

使用cgroup工具对服务器某些/全部用户进行计算资源限制 主要介绍&#xff0c;如何对指定/所有用户进行资源限定&#xff08;这里主要介绍cpu和内存占用限制&#xff09;&#xff0c;防止某些用户大量占用服务器计算资源&#xff0c;影响和挤占他人正常使用服务器。 安装cgrou…...

C#获取DataTable的前N行数据然后按指定字段排序

获取DataTable的前N行数据然后按指定字段排序 可以使用以下三种代码&#xff1a; 第一种&#xff1a;使用Linq DataTable dtLast dataTable.AsEnumerable().Take(count).OrderBy(dataRow > Convert.ToInt32(dataRow["Sequence"])).CopyToDataTable(); 第二种…...

Swift 中的动态成员查找

文章目录 前言基础介绍基础示例1. 定义一个动态成员访问类&#xff1a;2. 访问嵌套动态成员&#xff1a; 使用 KeyPath 的编译时安全性KeyPath 用法示例KeyPath 进阶使用示例1. 动态访问属性&#xff1a;2. 结合可选属性和 KeyPath&#xff1a;3. 动态 KeyPath 和字典&#xff…...

leetcode做题笔记102. 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 思路一&#xff1a;递归 int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){int** ans(int**)mal…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...

boost::filesystem::path文件路径使用详解和示例

boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类&#xff0c;封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解&#xff0c;包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...