Servelet学习-24.9.3

news2024/9/22 4:19:14

文章目录

  • 前言
  • 一、Servelet概述
    • 1.1 简单入门:
    • 2.2 生命周期
  • 二、HttpServletRequest对象
    • 2.1 常用方法
  • 三、HttpServeletResponse对象


前言

九月,加油


一、Servelet概述

Servelet: server applet

 servelet就是一个接口,定义了Java类被浏览器访问到的规则,内部一共包含了五个抽象方法:

  • destory():当服务器正常关闭时,销毁Servlet对象调用一次,仅调用一次
  • getServeletConfig():获取ServletConfig对象(Servlet的配置对象)
  • getServeletInfo():获取Servlet的一些信息,版本,作者等等
  • init(ServeletConfig config) :在Servlet创建时调用一次,仅调用一次
  • service(ServeletRequest req,ServeletResponse res):每次请求服务都会调用一次,调用多次

1.1 简单入门:

  1.创建项目
  2.定义一个类,实现Servelet接口
  3.实现接口中的抽象方法
  4.配置Servlet(即在xml文件中,配置实现类全面名到名称的映射,以及该名称带url路径的映射)
在这里插入图片描述

例如:http://localhost:8080/pro1/demo1

  • localhost:8080 ip地址+端口号
  • /pro1 项目的对外访问路径
  • /demo1 被访问类的对外访问路径

大致的一个过程是这样的:浏览器首先通过localhost访问到对应的主机,然后尝试请求连接该主机的8080端口以获取在该端口上运行的服务器服务(tomcat服务器会默认占用8080端口),tomcat会根据项目路径进行检索,找到部署在服务器上的对应的项目。然后根据具体的资源路径,到项目中的xml文件中检索是否存在url-pattern的值为/demo1,如果存在,获取到这个资源路径所对应的< servelet-name >标签体内容,然后再根据查询到的servlet-name检索该name对应的类文件的权限名。tomcat根据得到的全限名加载相应的字节码文件到内存中。然后创建一个类的实例(也就是一个Servlet对象),当处理请求到达时,服务器会将请求转交给类的实例调用类中实现的service方法(Servlet接口所规定的方法)来进行处理。

2.2 生命周期

  • 1.被创建:执行init方法,只执行一次
  • Servlet默认情况下在第一次被访问时创建,如果需要也可以通过配置来更改Servlet创建的时机
  • 由于init方法只会执行执行一次,说明Servlet在内存中只存在一个对象,即单例的。所以在多个用户同时访问时可能会存在安全问题。所以尽量不要在Servlet中定义成员变量,及时定义了成员变量也尽可能不对其进行修改操作。
  • 2.提供服务:执行service方法,每次请求服务都会执行一次
  • 3.被销毁:执行destory方法,当服务器正常关闭,销毁Servlet对象时会执行一次

tips:基础概念回顾

  • 软件架构

C/S : 客户端/服务器模式

B/S : 浏览器/服务器模式

  • 资源分类

静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源,静态资源可以 直接被浏览器所解析。如:html,css,JavaScript
动态资源:每个用户访问相同的资源后,得到的结果可能是不一样的,称为动态资源。动态资源在访问时,需要先转换为静态资源,然后再返回给浏览器解析。如:servlet/jsp,php,asp…

二、HttpServletRequest对象

主要用来接收客户端发送过来的请求信息,例如请求方法,请求协议版本,请求参数等等,这些信息都会被Tomcat封装到request对象中进行传递,后端所需要做的就是从中取出数据,然后进行分析处理。

2.1 常用方法

在这里插入图片描述

http://localhost:8080/sr02/s01?uname=admin&upwd=123456&hobby=sing&hobby=dance

/*常用方法 */
//获取请求时的完整路径(从http开始,到"?"前面结束)
String url = request.getRequestURL()+ "";
System.out.println("获取请求时的完整路径:+url);	//http://localhost:8080/sr02/s01

//获取请求时的部分路径(从项目的站点名开始,到"?"前面结束)
String uri =request.getRequestURI();
System.out.println("获取请求时的部分路径:"+uri);	///sr02/s01

//获取请求时的参数字符串 (从"?”后面开始,到最后的字符串)
String queryString=request.getQueryString();
System.out.println("获取请求时的参数字符串:"+ queryString);	//uname=admin

//获取请求方式(主要是GET和POST)
String method = request.getMethod();
System.out.println("获取请求方式:+ method);

//获取当前协议版本
String prototol = request.getProtocol();
System.out.println("获取当前协议版本:"+ prototol);

//获取项目的站点名(项目对外访问路径)
String webapp =request.getcontextPath();	
System.out.println("获取项目的站点名’+webapp);	///sr02

//重点:获取指定名称的参数值,返回字符串
String name = request.getParameter("uname");	//名称即请求中的参数名称,要保持一致,admin
String upwd = request.getParameter("upwd");	//123456

//重点:获取指定名称的参数的所有参数值,返回字符串数组(用于复选框传值)
String hobbys[] = request.getParameterValues("hobby");
//判断数组是否为空
if(hobbys != null && hobbys.length() > 0){
	for(String s:hobbys){
		sout(s);	//sing 
					//dance
	}
}

三、HttpServeletResponse对象

HttpServeletResponse的主要功能用于服务器对客户端的请求进行响应,将Web服务器处理后的结果返回给客户端。service()方法中形参接收的是HttpServeletResponse接口的实例化对象,这个对象中封装了向客户端发送数据、发送响应头、发送状态码的方法。

接收到客户端请求后,可以通过HttpServeletResponse对象直接进行响应,响应时需要获取输出流。有两种形式:

  • getWriter() 获取字符流(只能响应回字符)
PrintWriter writer = response.getWriter();
writer.write("Hello");
  • getOutputStream() 获取字节流(能响应一切数据)
ServletOutputStream out = response.getOutputStream();
out.write("Hello".getBytes());

响应回的数据到客户端被解析。但是两者不能同时使用,因为response对象只有一个。

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

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

相关文章

《大道平渊》· 廿壹 —— 杀心篇:何谓 “杀心”?本质上,就是寻求杀心的一个过程。

《大道平渊》 "行有不得&#xff0c;反求诸己。" ——《论语 学而》 指的是遇事遭困&#xff0c;须在自身寻因&#xff0c;而非怨天尤人&#xff0c;一味地归咎于外因。 凡事向内求也&#xff0c;多多自省&#xff0c;提高自身的修养和能力&#xff0c;取得成功。…

基于yolov8的106种鲜花识别花朵检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的106种鲜花识别花朵检测系统是一项融合了先进深度学习技术的创新应用。该系统利用YOLOv8算法&#xff0c;这一目前最先进的目标检测模型之一&#xff0c;实现了对106种不同花卉的快速、准确识别。 YOLOv8以其速度快、准确性高和鲁棒性强的特点&#…

模拟算法专题——算法介绍算法讲解力扣实战应用

目录 1、模拟算法介绍 2、算法应用【leetcode】 2.1 替换所有的问号 2.1.1 算法思想 2.1.2 算法代码 2.2 提莫攻击 2.2.1 算法思想 2.2.2 算法代码 2.3 Z字形变换 2.3.1 算法思想 2.3.2 算法代码 2.4 外观数列 2.4.1 算法思想 2.4.2 算法代码 2.5 数青蛙 2.5.1 算…

复旦NLP团队新作:大规模语言模型从理论到实践PDF版

2022 年 11 月&#xff0c;Chat GPT 的问世展示了大语言模型的强大潜能&#xff0c;并迅速引起了广泛关注。Chat GPT 能够有效理解用户需求&#xff0c;并根据上下文提供恰当的回答。它不仅可以进行日常对话&#xff0c;还能够完成复杂任务&#xff0c;如撰写文章、回答问题等。…

测试工程师学历路径:从功能测试到测试开发

现在软件从业者越来越多&#xff0c;测试工程师的职位也几近饱和&#xff0c;想要获得竞争力还是要保持持续学习。基本学习路径可以从功能测试-自动化测试-测试开发工程师的路子来走。 功能测试工程师&#xff1a; 1、软件测试基本概念&#xff1a; 学习软件测试的定义、目的…

Cubase里如何使用效果器插件?

Cubase里如何使用效果器插件&#xff1f;具体操作步骤如下&#xff1a; 1、首先&#xff0c;在你的电脑上打开Cubase软件。进入页面后&#xff0c;单击菜单栏上的设备以进入插件管理器&#xff0c;如下所示&#xff0c;然后继续下一步。 2、接下来&#xff0c;弹出插件管理器窗…

银行业智能化转型:智能客服的崛起与挑战

更多内容个人网站&#xff1a;孔乙己大叔 在当今这个科技日新月异的时代&#xff0c;银行业作为传统金融业的支柱&#xff0c;正经历着一场前所未有的变革。智能客服的兴起&#xff0c;不仅重塑了银行的服务模式&#xff0c;也深刻影响着银行员工的职业生涯。这场由技术驱动的变…

遥控器显示分别对应的无人机状态详解!!

1. 电量显示 遥控器电量&#xff1a;遥控器上通常会显示自身的电池电量&#xff0c;以提醒用户及时充电。 无人机电量&#xff1a;部分高端遥控器还会显示无人机的电池电量&#xff0c;以进度条或百分比的形式表示&#xff0c;帮助用户了解无人机的续航能力。 2. 飞行模式与…

24并发设计模式——线程池模式

一、线程池模式介绍 线程池模式&#xff08;Thread Pool Pattern&#xff09;是一种并发设计模式&#xff0c;用于管理和循环使用线程资源以处理大量任务。它旨在提高系统性能和资源利用率&#xff0c;特别是在需要频繁创建和销毁线程的环境中。 1、线程池模式结构图 线程池管…

弱通联条件下的人机混合控制

弱通联条件下的人机混合控制指的是在通信连接不稳定或不可靠的情况下&#xff0c;如何有效地将人工控制与自动化/智能化系统结合起来进行操作。这种情况下&#xff0c;控制系统需要设计得既能在网络问题时维持基本功能&#xff0c;又能充分利用人工输入来补充自动系统的不足。下…

Win10提示输入网络凭据解决方法(Win10 Prompts for Entering Network Credentials Solution)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

什么?!新版 Node.js V22.5 自带 SQLite 模块啦

前言 2024年7月&#xff0c;Node.js V22.5.0 版本发布&#xff0c;自带了 SQLite 模块&#xff0c;意味着开发者可以直接在程序中使用 SQLite 数据库&#xff0c;而无需引入第三方库&#x1f44d;。 话不多说&#xff0c;感觉来体验一波✈。 安装/升级 我现在用的是21.4.0版…

xss.haozi.me

0x03 审查源码我们发现&#xff0c;括号, 方括号都被过滤了 这段代码是一个简单的 JavaScript 函数&#xff0c;名为 render。它接受一个字符串 input 作为参数&#xff0c;并返回一个新的字符串&#xff0c;其中所有圆括号 ( 和 ) 都被移除了。 函数内部定义了一个正则表达式…

三级_网络技术_58_应用题

一、 请根据下图所示网络结构回答下列问题。 1.填写RG的路由表项。 目的网络/掩码长度输出端口__________S0&#xff08;直接连接&#xff09;__________S1&#xff08;直接连接&#xff09;__________S0__________S1__________S0__________S1 (2)如果在不改变路由表项的前提…

notepad++将换行替换成空

将多行里的换行置为一行&#xff0c;例如将下面的6行置为3行 crrlH打开替换框&#xff0c; 替换目标为【,\r\n】&#xff0c;替换成空&#xff0c;勾选循环查找和 正则表达式&#xff0c;全部替换即可。 替换后的效果

三级_网络技术_59_应用题

一、 请根据下图所示网络结构回答下列问题。 1.填写RG的路由表项。 目的网络/掩码长度输出端口__________S0&#xff08;直接连接&#xff09;__________S1&#xff08;直接连接&#xff09;__________S0__________S1__________S0__________S1 2.如果需要监听该网络内子网10…

SpringBoot 项目集成 xxl-job

1. xxl-job 官网 https://www.xuxueli.com/xxl-job/ 2. git 拉取 xxl-job 源码 2.1 源码仓库地址 https://github.com/xuxueli/xxl-job http://gitee.com/xuxueli0323/xxl-job 2.2 git 拉取源码 git clone https://gitee.com/xuxueli0323/xxl-job.git 2.3 git拉取源码时&…

CSS实现DIV水平展示

CSS实现DIV水平展示 css代码 .container {display: flex; /* 使用 Flexbox */justify-content: space-between; /* 在主轴上均匀排列 */width: 100%; /* 设置容器宽度 */ } .box {flex:1; height:100px; }HTML代码 <div class"container"><div class&quo…

高效智能的AI人工智能对话系统源码,具备强大的自然语言处理能力 带完整的安装代码包以及搭建部署教程

系统概述 随着互联网的普及和大数据时代的到来&#xff0c;人们对信息获取、处理及交互的需求日益增强。传统的界面操作已难以满足快速、便捷、人性化的服务需求&#xff0c;而自然语言处理&#xff08;NLP&#xff09;技术的突破&#xff0c;为构建更加智能的对话系统提供了可…

MASt3R:从3D的角度来实现图像匹配(更新中)

Abstract 图像匹配是 3D 视觉中所有性能最佳算法和pipeline的核心组件。 然而&#xff0c;尽管匹配从根本上来说是一个 3D 问题&#xff0c;与相机姿态和场景几何结构有内在联系&#xff0c;但它通常被视为一个 2D 问题。因为匹配的目标是建立 2D 像素字段之间的对应关系&#…