Servlet开发技术基础

Esp32蓝牙Hid调用方案 http执行设备、鼠标、键盘相关操作 本文主要介绍 Esp32 蓝牙 Hid 相关的多种操作方式,详细的设备、鼠标、键盘相关操作的 http 调用方法。下面是整理出的所有 http 调用方法和 rhino 引擎方式。本机调用的话直接使用http://localhost:8080 如果是局域网调用则使用软件里的地址 比如我的是http://192.168.1.5:8080。文件地址: https://www.123865.com/s/Qtm4jv-xyZbd?使用前需要一块烧录好的ESP32板子并在手机安装好embedded软件用于蓝牙通信。 阅读详情
一、Servlet概述
1.sun公司提供的动态web资源开发技术。本质是上一段java小程序,要求这个小程序必须实现Servlet接口,以便服务器能够调用。
2.开发Servlet的两个步骤
*实验:Servlet的快速入门
(1)步骤一:写一个java程序实现Servlet接口(此处直接继承了默认实现类GenericServlet)
package cn.itheima;
import java.io.*;
import javax.servlet.*;

public class FirstServlet extends GenericServlet{
public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException{
res.getOutputStream().write("My FirstServlet!".getBytes());
}

}

(2)将编译好的带包的.class放到WEB-INF/classes下以外,还要配置web应用的 web.xml注册Servlet
<servlet>
       <servlet-name>FirstServlet</servlet-name>
       <servlet-class>cn.itheima.FirstServlet</servlet-class>
   </servlet>
   <servlet-mapping>
       <servlet-name>FirstServlet</servlet-name>
       <url-pattern>/FirstServlet</url-pattern>
   </servlet-mapping>
3.利用MyEclipse开发Servlet
 
二、Servlet的详述
1.生命周期:一件事物什么时候生,什么时候死,在生存期间必然会做的事情,所有这些放在一起就是该事物的声明周期。
2.Servlet的生命周期:通常情况下,servlet第一次被访问的时候在内存中创建对象,在创建后立即调用init()方法进行初始化。对于每一次请求都掉用service(req,resp)方法处理请求,此时会用Request对象封装请求信息,并用Response对象(最初是空的)代表响应消息,传入到service方法里供使用。当service方法处理完成后,返回服务器服务器根据Response中的信息组织称响应消息返回给浏览器。响应结束后servlet并不销毁,一直驻留在内存中等待下一次请求。直到服务器关闭或web应用被移除出虚拟主机,servlet对象销毁并在销毁前调用destroy()方法做一些善后的事情。
3.Servlet接口的继承结构
Servlet接口:定义了一个servlet应该具有的方法,所有的Servlet都应该直接或间接实现此接口
|
|----GenericServlet:对Servlet接口的默认实现,通用Servlet,这是一个抽象类,其中的大部分方法都做了默认实现,只有service方法是一个抽象方法需要继承者自己实现
|
|----HttpServlet:对HTTP协议进行了优化的Servlet,继承自GenericServlet类,并且实现了其中的service抽象方法,默认的实现中判断了请求的请求方式,并根据请求方式的不同分别调用不同的doXXX()方法。通常我们直接继承HttpServlet即可



4.web.xml注册Servlet的注意事项
4.1利用<servlet><servlet-mapping>标签注册一个Servlet
<servlet>
        <servlet-name>FirstServlet</servlet-name>
        <servlet-class>cn.itheima.FirstServlet</servlet-class>  注意:此处要的是一个Servlet的完整类名,不是包含.java或.class扩展的文件路径
    </servlet>
    <servlet-mapping>
        <servlet-name>FirstServlet</servlet-name>
        <url-pattern>/FirstServlet</url-pattern>
    </servlet-mapping>
    4.2一个<servlet>可以对应多个<servlet-mapping>
    4.3可以用*匹配符配置<serlvet-mapping>,但是要注意,必须是*.do或者/开头的以/*结束的路径。
    ~由于匹配符的引入有可能一个虚拟路径会对应多个servlet-mapping,此时哪个最像找哪个servlet,并且*.do级别最低。
    4.4可以为<servlet>配置<load-on-startup>子标签,指定servlet随着服务器的启动而加载,其中配置的数值指定启动的顺序
    <servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
4.5缺省servlet:如果一个servlet的对外访问路径被设置为/,则该servlet就是一个缺省servlet,其他servlet不处理的请求都由它来处理
~在conf/web.xml中配置了缺省servlet,对静态资源的访问和错误页面的输出就是由这个缺省servlet来处理的。如果我们自己写一个缺省servlet把爸爸web.xml中的缺省servlet覆盖的话,会导致静态web资源无法访问。所以不推荐配置。
4.6servlet的线程安全问题
4.6.1由于通常情况下,一个servlet在内存只有一个实例处理请求,当多个请求发送过来的时候就会有多个线程操作该servlet对象,此时可能导致线程安全问题。
(1)serlvet的成员变量可能存在线程安全问题
*实验:定义一个成员变量 int i = 0;在doXXX()方法中进行i++操作并输出i值到客户端,此时由于延迟可能导致线程安全问题
(2)serlvet操作资源文件时,多个线程操作同一文件引发线程安全问题
*实验:请求带着一个参数过来,servlet将请求参数写入到一个文件,再读取该文件,将读取到的值打印到客户端上,有可能有线程安全问题

4.6.2解决方法
(1)利用同步代码块解决问题。缺陷是,同一时间同步代码块只能处理一个请求,效率很低下,所以同步代码块中尽量只包含核心的导致线程安全问题的代码。
(2)为该servlet实现SingleThreadModel接口,此为一个标记接口,被标记的servlet将会在内存中保存一个servlet池,如果一个线程来了而池中没有servlet对象处理,则创建一个新的。如果池中有空闲的servlet则直接使用。这并不能真的解决线程安全问题。此接口已经被废弃。
(3)两种解决方案都不够完美,所以尽量不要在servlet中出现成员变量。


三、ServletConfig
1.代表servlet配置的对象,可以在web.xml中<servlet>中配置
<servlet>
   <servlet-name>Demo5Servlet</servlet-name>
   <servlet-class>cn.itheima.Demo5Servlet</servlet-class>
   <init-param>
    <param-name>data1</param-name>
    <param-value>value1</param-value>
   </init-param>
 </servlet>
 然后在servlet中利用this.getServletConfig()获取ServletConfig对象,该对象提供了getInitParameter()和getInitParameterNames()方法,可以遍历出配置中的配置项。
 不想在servlet中写死的内容可以配置到此处。
    
    
四、ServletContext
1.代表当前web应用的对象。

2.作为域对象使用,在不同servlet之间传递数据,作用范围是整个web应用
生命周期:当web应用被加载进容器时创建代表整个web应用的ServletContext对象。当服务器关闭或web应用被移除出容器时,ServletContext对象跟着销毁。
~域:一个域就理解为一个框,这里面可以放置数据,一个域既然称作域,他就有一个可以被看见的范围,这个范围内都可以对这个域中的数据进行操作,那这样的对象就叫做域对象。
3.在web.xml可以配置整个web应用的初始化参数,利用ServletContext去获得
<context-param>
<param-name>param1</param-name>
<param-value>pvalue1</param-value>
</context-param>
this.getServletContext().getInitParameter("param1")
this.getServletContext().getInitParameterNames()

4.在不同servlet之间进行转发
this.getServletContext().getRequestDispatcher("/servlet/Demo10Servlet").forward(request, response);
方法执行结束,service就会返回到服务器,再有服务器去调用目标servlet,其中request会重新创建,并将之前的request的数据拷贝进去。


5.读取资源文件
5.1由于相对路径默认相对的是java虚拟机启动的目录,所以我们直接写相对路径将会是相对于tomcat/bin目录,所以是拿不到资源的。如果写成绝对路径,当项目发布到其他环境时,绝对路径就错了。
5.2为了解决这个问题ServletContext提供了this.getServletContext().getRealPath("/1.properties"),给进一个资源的虚拟路径,将会返回该资源在当前环境下的真实路径。this.getServletContext().getResourceAsStream("/1.properties"),给一个资源的虚拟路径返回到该资源真实路径的流。
5.3当在非servlet下获取资源文件时,就没有ServletContext对象用了,此时只能用类加载器
classLoader.getResourceAsStream("../../1.properties"),此方法利用类加载器直接将资源加载到内存中,有更新延迟的问题,以及如果文件太大,占用内存过大。
classLoader.getResource("../1.properties").getPath(),直接返回资源的真实路径,没有更新延迟的问题。
走向审计4.0:内部审计数字化转型的路径与方法 企业的内部审计人员可以以数字化为手段,建立内部审计新生态,在数字化过程中引进战略审计、服务审计、开放审计、敏捷审计、数字审计、智慧审计等理念、方法和工具,完成数智生态审计转型。内部审计的审计对象远比国家审计和公众审计丰富和多元化,理论上企业经营管理和日常操作的各个方面都可以成为内部审计的对象,此外还可以开展独立咨询活动。由于内部审计的数字化或数字化的内部审计是实现审计数字化转型的必要条件,是实现“数字引领、数据强审”目标的核心手段,因此企业内部审计部门势必要投入足够的资金和人才来打造一支数字化审计新队伍。 阅读详情

相关推荐

STM32 ST-LINK Utility 无法烧录程序的解决方法

当你打开STM32 ST-LINK Utility,硬件连接好st-link V2,打开了要烧写的文件,点那个Program verify烧录时, 如果出错了: Programming error @ 0x08000000! 我的方法是: 点你想要烧录那个HEX文件的小格,复制 然后去到你前面的文件的格子里,点粘贴: 成功! ...

wocute的博客 9521

Servlet概述

为什么80%的码农都做不了架构师?>>> ...

weixin_33811539的博客 228

KEGG数据库与KAAS工具:基因功能注释的实用指南

本文提供了使用KEGG数据库与KAAS工具进行基因功能注释的完整实用指南。详细阐述了如何从准备基因或蛋白序列开始,通过KAAS服务器获取KEGG Orthology(KO)编号,并解读注释结果。文章进一步介绍了如何利用KOBAS工具进行通路富集分析,将定性观察转化为定量洞察,并分享了提高注释准确率、处理大数据集及使用API等避坑技巧与高阶方法,为基因组学、转录组学研究者奠定坚实的数据分析基础。

weixin_29292535的博客 390

java web笔记-servlet

Servlet是Sun公司提供的一种用于开发动态WEB资源的技术 开发一个动态WEB资源(即开发一个java程序向浏览器输出数据),需要完成两步骤 1.编写java类实现servlet接口 2.把开发好得java类部署到web服务器中 HttpServlet在实现servlet接口时,重写了service()方法,该方法内部会自动判断请求方式,get请求调用doGet()方法,

beyond_zl的博客 604

法兰克仿真软件FANUC CNC Guide v25.0 安装教程及中文设置

下载地址在文末。我们公司用新到一批FANUC 系统的设备,为方便使用就装了一个 FANUC 数控系统仿真软件FANUC CNC Guide v25.0 ,还是最新版不是市面上流传的老版本。模拟学习一下。

hakesashou的博客 1万+

用R来做一个临床研究亚组分析的森林图

在编程语言里R语言最强大的功能是做图功能,我们知道在做Meta分析的时候会需要做森林图,实际上我们在很多临床研究中也经常看到森林图,主要是亚组分析的森林图,比如下面这篇文章里的一个森林图: 今天就教教大家怎么用R语言来做上面这种亚组分析的森林图 1. 在Excel里编辑好数据,按照下面的格式整理,保存为csv格式 2. 下载安装R跟Rstudio R软件的下载地址: https://mirrors.tuna.tsinghua.edu.cn/CRAN/ Rstudio下

Mrrunsen的博客 5340

[JavaWeb①]复习题库

javaweb

硕士在读小菜鸟的博客 3450

AUTOSAR知识点 之 XCP (三):XCP功能描述

记录一下XCP使用时候的功能包含命令时序、错误码表、事件描述以及对规范的记录。XCP的图示如下从上图就可以看出数据流的流向CAN-CANIF-XCP,发送反之。XCP的状态机如下。

梦想技术家 3075

ServletContext三大功能

ServletContext三大功能 1、作为域使用。 2、读取文件。 3、获取初始化参数。

Housenhao的博客 1105

C#实现低通和高通滤波算法

低通滤波器允许通过低于某个截止频率的信号成分,并且抑制高于该频率的成分。而高通滤波器则允许通过高于某个截止频率的信号成分,并抑制低于该频率的成分。巴特沃斯滤波器是一种对称的滤波器,具有平坦的幅度响应和最小的群延迟。低通和高通滤波是数字信号处理中常用的滤波技术,用于滤除或增强信号中的特定频率成分。在本篇文章中,我们将使用C#编程语言来实现低通和高通滤波算法。以上就是使用C#实现低通和高通滤波算法的示例代码。你可以根据自己的需求调整截止频率和采样率,将这些代码应用于你的项目中。是滤波器的截止频率,

XisVisual_Basic的博客 1274

最佳RANSAC算法拟合矩形的实现(基于PCL库)

最佳RANSAC算法是一种常用的参数估计方法,用于从数据集中拟合出最佳的模型。在计算机视觉和图像处理领域,最佳RANSAC算法常用于拟合几何形状,如矩形。本文将详细介绍如何使用点云库(PCL)中的最佳RANSAC算法来拟合矩形,并提供相应的源代码。

JbPatch的博客 1541

Servlet上下文

ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。如,做一个购物类的网站,要从数据库中提取物品信息,如果用se

2009

搭建自己的MQTT服务器,实现设备上云(Ubuntu+EMQX)

这篇文章教大家在ECS云服务器上部署EMQX,搭建自己私有的MQTT服务器,配置EMQX实现设备上云,设备数据转发,存储;服务器我采用的华为云的ECS服务器,系统选择Ubuntu系统。

2万+

JAVA WEB开发技术随堂笔记 Servlet技术

🌴 2022.5.12 早八 文章目录6.1 Servlet技术6.1.1 Servlet与Servlet容器6.1.2 Servlet技术特点6.1.3 Servlet技术功能6.1.4 Servlet与JSP的区别6.1.5 Servlet代码结构6.1.6 简单的Servlet程序6.2 Servlet开发6.2.1 Servlet的创建6.2.2 Servlet配置6.3 Servlet API编程常用的接口和类6.3.1 Servlet接口6.3.2 ServletConfig接口6.3.3 Ht

张时贰的博客 678

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Servlet开发技术介绍与学习

本文为大家介绍了后端开发基础——Servlet开发技术,希望对你有帮助~~

weixin_53919192的博客 1211

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Servlet 开发技术

创建Servlet项目、处理请求并响应、Servlet 生命周期、CORS跨域设置

二哈喇子! 961

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

第二章 servlet开发技术

1.Servlet简介 1.1.Servlet概述   Servlet是用Java语言编写的运行在服务器端的程序,能 够接收Web客户端的请求,并能对 Web客户端进行响应,通常是通过HTTP协议进行工作的。   Servlet的运行需要有 Web容器的支持,它为 Servlet提供了运行时环境,并负责在适当的时刻加载和调用 Servlet。 Servlet的主要作用有: 1.读取客户发送的所有数据 2.查询 HTTP 请求中包含的任何其他请求信息 3.处理数据并生成结果 4.设置合适的 HTTP 响应参数

qq_45819769的博客 211

Java Web 开发技术的演进:从 Servlet、Spring MVC 到 WebFlux 及其竞品分析

在这篇文章中,我们将探讨这三个技术的发展历程、痛点及解决方案,以及它们如何帮助开发者在不断变化的互联网世界中构建更高效、可扩展和响应式的 Web 应用程序。它是一个基于 Java 的 Web 应用程序框架,可以认为是servlet框架,提供了一套简化 Web 开发的工具和约定。每个新技术的出现都旨在解决上一个技术的痛点,并为开发者提供更好的工具和实践。总之,WebFlux 更适合处理高并发、数据流处理和微服务架构的场景,但对于一些简单的应用程序,传统的 Spring MVC 可能仍然是一个不错的选择。

weixin_36873225的博客 1565

Servlet动态Web资源开发技术

Servlet动态Web资源开发技术简介 实现效果:即不同的用户访问,或者访问携带的参数不一样,则看到的页面不一样 规范就是一个一个的接口。 Servlet开发流程: 一定要将依赖范围设置成provided,即编译和测试时有效,运行时无效,这样的话,在打成war包的时候,就不会有servlet打成包,否则会与项目本身自带的servlet包冲突,就会报错 ...

NJUSTZJC的博客 694

Servlet开发技术,创建,以及Servlet的配置,web.xml的配置

Servlet开发技术,创建,以及Servlet的配置,web.xml的配置 直接上图,不废话!!! 第一:首先在Eclipse的包资源管理器中,单机鼠标右键,在弹出的快捷键菜单中选择“新建”/Servlet命令,在弹出的对话框中输入新建的Servlet所在的包和类名,然后单击下一步, 我选择默认,Next 依旧默认,Ne...

HiterCoder 251

JAVA动态web开发技术——Servlet

一,简介 servlet是java提供的一个动态web开发技术,它是javaee的规范之一,其实就是一个接口。将来我们需要写servlet类去实现,或者间接实现servlet接口,并由web服务器运行servlet。 二、servlet的快速入门 接下来我们用servlet快速的写一个入门案例 1、创建web程序,导入依赖servlet坐标(我选的是3.1.0) 这里要注意一下,如果使用tomcat服务器的话,要在依赖坐标下面加一个<scope>,去限制jar包的所用范围。原因是tom

qq_52188972的博客 1433

Web服务端:Servlet开发技术 1

全称Java Servlet,是运行在Web或应用服务器上的。

Helowr的博客 1075

Web服务端技术:Servlet开发技术 2

元数据是添加到程序元素如方法、字段、类和包上的额外信息,注解就是一种载体形式。注解不能直接干扰程序代码的运行。

Helowr的博客 1022

动态网页开发技术(一):Servlet

1. Servlet 1.1 Servlet概述 java EE Api Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。 1.2 Servlet的使用 编写一个Java类实现Servlet接口—>重写service()方法; 在web.xml中配置这个类(方便服务器识别并执行和访问)。 配置web.xml: 配置servle

愚者的博客 985
上一篇: WEB开发入门以及HTTP协议
下一篇: Response和Resquest基础知识+实际开发中需要注意的点(经典)
escdelete
博客等级 码龄14年 37粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值