Servlet服务器端的小程序

文章目录

    • Servlet
      • 概述
      • 快速入门
      • Servlet 中方法的生命周期
      • Servlet 的体系结构
        • GenericServlet
        • HttpServlet
      • Servlet 3.0以后
        • Servlet 相关配置
    • 案例
      • Servlet xml配置
        • web.xml
        • MyServlet
      • Servlet 注解配置

Servlet

概述

  • Servlet applet 运行在服务器端的小程序,Servlet 就是一个接口,定义了 Java 类被浏览器访问到的规则(Tomcat能识别),我们自定义一个类,实现 Servlet 接口,复写接口中的方法。

  • 访问流程

快速入门

  1. 创建 JavaEE 项目

  2. 定义一个类,实现 Servlet 接口

  3. 实现接口中的抽象方法

  4. 配置 Servlet(web.xml) 将类映射成 url

    <!--配置Servlet -->
    <servlet><servlet-name>demo</servlet-name><servlet-class>cn.heng.web.servlet.ServletDemo</servlet-class>
    </servlet><servlet-mapping><servlet-name>demo</servlet-name><url-pattern>/demo</url-pattern>
    </servlet-mapping>
    
  5. 执行原理

    • 当服务器接受到客户端浏览器的请求后,会解析请求的 URL 路径,获取访问的 Servlet 的资源路径
    • 查找 web.xml 文件,是否有对应的 标签体内容
    • 有的话,则找到对应的 全类名
    • Tomcat 会将字节码文件加载进内存中,并且创建其对象,调用其方法

Servlet 中方法的生命周期

  1. 被创建:执行 init 方法,只执行一次
    • Servlet 什么时候被创建?
      • 默认情况下,第一次被访问时,Servlet 被创建(也可配置执行Servlet的创建时机)
      • 第一次被访问时,创建 的值为负数
      • 在服务器启动时,创建 的值为 0 或 正整数
    • Servlet 的 init 方法,只执行一次
      • 说明一个 Servlet 在内存中 只存在一个对象,Servlet 是单例的
      • 多个用户同时访问时,可能存在线程安全问题
      • 尽量不要在 Servlet 中定义成员变量,即使定义了成员变量,也不要修改值
  2. 提供服务:执行 service 方法,执行多次
    • 每次访问 Servlet 时,service 方法都会被调用一次
  3. 被销毁:执行 destroy 方法,只执行一次
    • Servlet 被销毁时执行,服务器关闭时,Servlet 被销毁,只有服务器正常关闭时,才会执行 destroy 方法
    • destroy 方法在 Servlet 被销毁之前执行,一般用于释放资源

Servlet 的体系结构

Servlet – 接口
GenericServlet – 抽象类
HttpServlet – 抽象类
GenericServlet
  • 概述:将 Servlet 接口中其他的方法做了 默认空实现,只将 service() 方法作为抽象
  • 使用:将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
HttpServlet
  • 概述:对http协议的一种封装,简化操作

  • 实现过程

Servlet 3.0以后

  • 好处:支持注解配置,可以不需要 web.xml

  • 使用步骤

    1. 创建 Java EE 项目,选择 Servlet的版本3.0以上,可以不创建 web.xml
    2. 定义一个类,实现 Servlet 接口
    3. 复写方法
    4. 在类上使用 @WebServlet(“资源路径”) 注解,进行配置
  • 示例代码

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface WebServlet {String name() default "";//相当于<Servlet-name>String[] value() default {};//代表urlPatterns()属性配置 value只有一个可以省略String[] urlPatterns() default {};//相当于<url-pattern>int loadOnStartup() default -1;//相当于<load-on-startup>WebInitParam[] initParams() default {};boolean asyncSupported() default false;String smallIcon() default "";String largeIcon() default "";String description() default "";String displayName() default "";
    }
    
Servlet 相关配置
  • urlpartten:Servlet访问路径
    • 一个Servlet可以定义多个访问路径 : @WebServlet({“/d4”,“/dd4”,“/ddd4”})
    • 路径定义规则
      • /xxx:路径匹配
      • /xxx/xxx:多层路径,目录结构
      • *.do:扩展名匹配

案例

Servlet xml配置

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!--配置名称和全类名--><servlet><servlet-name>demo1</servlet-name><servlet-class>cn.heng.web.MyServlet</servlet-class><!--指定 Servlet 的创建时机1、第一次被访问时,创建<load-on-startup> 为 负数2、在服务器启动时,创建<load-on-startup> 为 0 或正整数--><load-on-startup></load-on-startup></servlet><!--配置路径--><servlet-mapping><servlet-name>demo1</servlet-name><url-pattern>/test</url-pattern></servlet-mapping>
</web-app>
MyServlet
import javax.servlet.*;
import java.io.IOException;public class MyServlet implements Servlet {/*** 初始化方法* 在 Servlet 被创建时,执行。只会执行一次* @param servletConfig* @throws ServletException*/@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("init...");}/*** 获取 ServletConfig 对象* ServletConfig : Servlet的配置对象* 我们需要自己实现* @return*/@Overridepublic ServletConfig getServletConfig() {return null;}/*** 提供服务的方法* 每一次 Servlet 被访问时,执行。执行多次* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("Servlet....");}/*** 获取 Servlet 的一些信息*  版本、作者等*  一般不实现* @return*/@Overridepublic String getServletInfo() {return null;}/*** 销毁方法* 在服务器正常关闭的时候,执行。执行一次*/@Overridepublic void destroy() {System.out.println("destroy....");}
}

Servlet 注解配置

类实现 Servlet 复写所有方法,加上 @WebServlet(“url”);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

挑战杯 python+opencv+机器学习车牌识别

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于机器学习的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;3分 该项目较为新颖&#xff0c;适…

【MySQL】在 Centos7 环境安装 MySQL -- 详细完整教程

说明&#xff1a; 安装与卸载中&#xff0c;用户全部切换成为 root&#xff0c;一旦安装&#xff0c;普通用户就能使用。 一、卸载内置环境 1、卸载不要的环境 [rootVM-8-5-centos ~]$ ps ajx | grep mariadb # 先检查是否有mariadb存在 13134 14844 14843 13134 pts/0 14843…

NLP_Bag-Of-Words(词袋模型)

文章目录 词袋模型用词袋模型计算文本相似度1.构建实验语料库2.给句子分词3.创建词汇表4.生成词袋表示5.计算余弦相似度6.可视化余弦相似度 词袋模型小结 词袋模型 词袋模型是一种简单的文本表示方法&#xff0c;也是自然语言处理的一个经典模型。它将文本中的词看作一个个独立…

Java Collection 集合体系的使用

Java Collection 集合体系的使用 package com.zhong.collection;import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet;public class CollectionDemo {public static void main(String[] args) {// ArrayList 有序 可…

C语言贪吃蛇详解

个人简介&#xff1a;双非大二学生 个人博客&#xff1a;Monodye 今日鸡汤&#xff1a;人生就像一盒巧克力&#xff0c;你永远不知道下一块是什么味的 C语言基础刷题&#xff1a;牛客网在线编程_语法篇_基础语法 (nowcoder.com) 一.贪吃蛇游戏背景 贪吃蛇是久负盛名的游戏&…

###C语言程序设计-----C语言学习(9)#函数基础

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 一. 基础知识的学习 1.函数的定义 函数是一个完成特定工作的独立程序模块&…

GPT-1, GPT-2, GPT-3, GPT-3.5, GPT-4论文内容解读

目录 1 ChatGPT概述1.1 what is chatGPT1.2 How does ChatGPT work1.3 The applications of ChatGPT1.3 The limitations of ChatGPT 2 算法原理2.1 GPT-12.1.1 Unsupervised pre-training2.1.2 Supervised fine-tuning2.1.3 语料2.1.4 分析 2.2 GPT-22.3 GPT-32.4 InstructGPT…

如何使用MCSM搭建我的世界Java版服务器并实现远程联机游戏

文章目录 1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 本教程主要介…

面试题:SpringBoot 在打包部署的时候打包成 jar 和 war 有什么不同?

文章目录 前言jar包和war包的区别一、打包成jar二、打包成war包形式 前言 首先给大家来讲一个我们遇到的一个奇怪的问题: 我的一个springboot项目&#xff0c;用mvn install打包成jar&#xff0c;换一台有jdk的机器就直接可以用java -jar 项目名.jar的方式运行&#xff0c;没…

Unable to access SFTP sub-system, operation failed

解决方法&#xff1a; 1. 编辑 /etc/ssh/sshd_config 配置文件 2. 重启SSHD服务 service sshd restart 还有一种特殊情况&#xff0c;也是本文重点要介绍的&#xff1a; 当启用sftp-server后&#xff0c;使用FlashFXP等工具传输文件的时候&#xff0c;仍然失败&#xff0c;…

『运维备忘录』之 Vim 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

MySQL进阶45讲【10】MySQL为什么有时候会选错索引?

1 前言 前面我们介绍过索引&#xff0c;在MySQL中一张表其实是可以支持多个索引的。但是&#xff0c;写SQL语句的时候&#xff0c;并没有主动指定使用哪个索引。也就是说&#xff0c;使用哪个索引是由MySQL来确定的。 大家有没有碰到过这种情况&#xff0c;一条本来可以执行得…

vue2 自定义指令 v-highlight 文本高亮显示分享

简单分享一个文本高亮显示的自定义指令&#xff0c;主要分两部分&#xff1a; 1、代码实现&#xff1a;在 main.js 文件中添加一个自定义指令&#xff0c;实现搜索时文本高亮显示&#xff0c;代码如下&#xff1a; const highlightText (el, searchText) > {const textCo…

Linux--- vim详解

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 “学如逆水行舟&#xff0…

大数据企业应用场景分析

目录 一、企业分析 1.1 企业领域维度分析 1.2 技术服务型维度分析 1.3 细分领域维度分析 二、大数据应用场景 2.1 数据分析 2.2 智能推荐 2.3 产品/流程优化 2.4 异常监测 2.5 智能管理 2.6 人工智能和机器学习 三、总结 前言&#xff1a;想讲清楚大数据应用对企业…

响应式开发如何设置断点,小屏幕界面该如何显示(有动图)

Hi&#xff0c;我是贝格前端工场&#xff0c;本期分享响应式开发&#xff0c;如何设置屏幕断点&#xff0c;pc页面布局到了移动端之后该如何布局的问题&#xff0c;微软也提供了设置屏幕断点的动图演示&#xff0c;非常直观。 一、什么是响应式开发&#xff0c;为何要设置屏幕断…

常用存储器

目录 一、存储器的种类 二、易失性存储器&#xff08;RAM&#xff09; 1. DRAM &#xff08;1&#xff09;SDRAM &#xff08;2&#xff09;DDR SDRAM 2. SRAM 3. DRAM与SRAM的应用场合 三、非易失性存储器 1. ROM &#xff08;1&#xff09;MASK ROM &#xff08;2…

YoloV8改进策略:Neck改进:HAM混合注意力机制改进YoloV8|多种改进,多种姿势涨点|代码注释详解

摘要 HAM通过快速一维卷积来缓解通道注意机制的负担,并引入通道分离技术自适应强调重要特征。HAM作为通用模块,在CIFAR-10、CIFAR-100和STL-10数据集上实现了SOTA级别的分类性能。 论文链接:https://www.sciencedirect.com/science/article/abs/pii/S0031320322002667?vi…

2024年【天津市安全员B证】考试报名及天津市安全员B证最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 天津市安全员B证考试报名根据新天津市安全员B证考试大纲要求&#xff0c;安全生产模拟考试一点通将天津市安全员B证模拟考试试题进行汇编&#xff0c;组成一套天津市安全员B证全真模拟考试试题&#xff0c;学员可通过…

【产品升级】SmartPipe升级到版本2.0

在近一个月的攻关和测试下&#xff0c;SmartPipe软件轴线自动识别算法的性能大幅提升&#xff0c;鲁棒性和稳定性进一步增强。近一年来客户累计反馈的多种复杂管路&#xff08;包括带有支管管路、带有压瘪段管路、推弯管、装配管、带有复杂孔洞管路等&#xff09;现在均能够正确…