servlet开发详解

news2024/11/6 9:39:28

一、什么是servlet,干什么用的???

tomcat作为一个web服务器,也称作servlet容器。servlet只有放在web服务器中才能运行,不能独立运行。tomcat这个容器要做三件事:接收请求、处理请求和响应请求。接收和响应请求没有什么区别,tomcat内部就写好了怎么做。只有处理请求需要程序员自己编写,但是编写不能是胡乱编写的,于是有了servlet接口提供规范。

servlet并不神秘,只是一个接口,我们实现了这个接口就能做处理请求的逻辑编写。

servlet就是处理请求逻辑的抽取,就是一个接口

在学习完spring框架后,我们就不用自己编写servlet程序。spring中的DispatcherServlet其实本质就是一个Servlet。

二、怎么编写servlet程序

1.自定义类继承httpservlet(一个抽象类)从而继承GenericServelet类。我们需要重写doGet()和doPost()两个方法。

2.配置web.xml文件

配置javaweb三大组件:

  • servlet
<servlet>
         <!-- servlet的内部名称,自定义 -->
        <servlet-name>DemoAction</servlet-name>
        <!-- servlet的类全名:包名+类名 -->
        <servlet-class>com.uplooking.controller.DemoAction</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>  
<!-- servlet的映射配置 -->
<servlet-mapping>
        <!-- servlet的内部名称,一定要和上面的内部名称保持一致 -->
        <servlet-name>DemoAction</servlet-name>
        <!-- servlet的映射路径(访问serclet的名称 -->
        <url-pattern>/DemoAction</url-pattern>
</servlet-mapping>
  • listener(监听器):主要用于监听 ServletContext、HttpSession 和 ServletRequest 等对象的生命周期和属性的变化,这些监听器可以用来处理 Web 应用程序中的各种事件,例如初始化、销毁、属性变化等。在spring框架中ContextLoaderListener监听器,启动tomcat时自动装配spring的配置。
  • filter(过滤器):对请求和响应进行过滤,用于权限控制、编码设置、过滤敏感词汇等。(下面是spring框架内置的过滤器),如果自己写就实现javax.servlet.Filter接口就行,不用配置。
     <filter>
        <filter-name>SpringCharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>SpringCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>

三、servlet程序的调用过程

  • 根据请求行,定位虚拟主机、web应用和请求的资源
  • 在web.xml配置文件中寻找对应的url处理的servlet,以及全路径
  • tomcat会根据全路径利用反射创建servlet实例,并且执行service方法
    Class.forName(“com.hhh.servlet”).newInstance():
  • service方法使用request和response对象作为参数,进行数据的处理已经封装
  • 返回浏览器符合http协议的响应对象

1.servlet是单例模式

每次进行访问请求时,都会查询内存中是否有servlet对象,如果没有就创建。当服务器关闭时servlet对象销毁。

2.每次请求的request和response对象都是新创建的

四、request对象

requst对象用于服务器获取浏览器提供的请求信息。

1.作用一:获取请求参数

请求参数就是浏览器向服务器发送请求时携带的参数,有请求体中的参数或在url拼接的参数。

request.getParameter(String ParamName); 

注意编码问题

request.setCharacterEncoding("utf-8"); 

2.作用二:实现请求转发

什么叫请求转发???

请求转发就是访问资源a时,a资源没有做处理将请求转发给资源b,资源b对这个请求进行响应。

注意:请求转发浏览器的url不会变化;一次请求一次响应

请求转发必须在同一个web应用中进行;

请求转发的的url必须有servelt映射,否则404;

请求转发和域对象配合可以携带数据

request.getRequestDispatcher(String url).forward(req,res); 

3.作用三:配合作用域对象实现带数据转发

什么是域对象???

域对象就是一个有访问范围、有map属性,通过自身的map在访问域内实现资源的共享。request对象就是一个域对象。

request提供的共享map数据的方法

request.setAttribute(String keyName, Object value);
//存储map数据
request.getAttribute(Sting keyName); 
//获取某个key的value

步骤:

  • 第一步:在处理请求的Servelet类中的doGet()方法中通过setAttribute()方法完成数据封装。并通过request.getRequestDispatcher(String url).forward(req,res);完成转发。
  • 第二步:在数据目的地通过request.getAttibute()方法获取解析数据。

五、response对象

1.作用一:向浏览器返回数据

response.getWriter().write(data);
response.setContentType("utf-8");
//响应的编码方式

2.作用二:重定向

什么是重定向???

重定向就是请求资源a的时候,需要进一步请求资源b才能获取对应的资源。

重定向是两次请求两次响应。浏览器的url变化。

重定向两次请求的request对象不同

重定向两次请求的资源可以是不同的web应用、甚至可以是不同的服务器。

步骤

  • 代码:response.sendRedirect("重定向资源的url");
  • 关于重定向资源的url:
    • 可以是同一web应用下的其它文件,如:fileName.fileType。
    • 可以是同一虚拟主机的其它web应用的资源,如:/webAppName/[resourceDecName/]fileName.filetype。
    • 可以是其它虚拟主机,如:http://www.baidu.com.

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

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

相关文章

VMware ESXi部署macOS Monterey

正文共&#xff1a;1024 字 30 图&#xff0c;预估阅读时间&#xff1a;2 分钟 最早使用黑苹果是在2015年&#xff0c;装在了古老的Acer商务本上&#xff08;老樹發新芽&#xff0c;acer tm 4750g裝黑蘋果&#xff09;&#xff1b;上次安装黑苹果是在两年前&#xff08;VMware…

uniapp写小程序如何实现分包

众所众知小程序上传的过程中对包的大小有限制&#xff0c;正常情况下不允许当个包超过2M&#xff0c;所以需要分包 需要再pages.json这个文件夹中进行配置 "pages": [{"path": "pages/index/index","style": {"navigationBarTit…

【Flink架构】关于FLink BLOB的组织架构:FLIP-19: Improved BLOB storage architecture:官网解读

文章目录 一. BlobServer架构1.BlobClient2. BlobServer3. BlobCache4. LibraryCacheManager 二、BLOB的生命周期1. 分阶段清理2. BlobCache的生命周期3. BlobServer 三、文件上下载流程1. BlobCache 下载2. BlobServer 上传3. BlobServer 下载 四. Flink中支持的BLOB文件类型1…

VTK 示例 基本的流程-事件交互、球体、

流程可以总结如下&#xff1a; 导入所需的头文件&#xff1a; 首先&#xff0c;导入了一系列 VTK 头文件&#xff0c;这些文件包含了所需的类和函数声明。 创建对象&#xff1a; 创建了两个球体&#xff08;一个较大&#xff0c;一个较小&#xff09;&#xff0c;一个平面&…

Docker和 Containerd 的区别

自 Docker 开启了使用容器的爆发式增长&#xff0c;有越来越多的工具和标准来帮助管理和使用这项容器化技术&#xff0c;与此同时也造成了有很多术语让人感到困惑。 容器生态系统 容器生态系统是由许多令人兴奋的技术、大量的专业术语和大公司相互争斗组成的。 幸运的是&…

Windows平台cmake编译QT源码库,使用VScode开发QT

不愿意安装庞大的QT开发IDE&#xff0c;可以编译QT源码库。 下载源码可以用国内镜像&#xff0c;如清华大学的&#xff1a;Index of /qt/archive/qt/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 我用的是 6.5.3&#xff0c;进去之后&#xff0c;不要下载整个源…

linux环境gitlab迁移到新服务器

目录 备份项目备份gitlab配置阿里云磁盘格式化准备 最近服务器中了挖矿病毒&#xff0c;清理几次&#xff0c;都没有搞定&#xff0c;只能重新安装gitlab 备份项目 先把项目备份到本地 git pull git remote prune origin确保本地代码是最新的并且拥有所有的分支 git remote …

unity 横版过关单向通行实现(PlatformEffector2D)

目录 前言一、什么是 PlatformEffector2D&#xff1f;二、使用步骤1.创建模型2.创建jump脚本3.PlatformEffector2D组件 三、效果总结 前言 在 2D 游戏中&#xff0c;处理角色与平台之间的交互是一个常见但复杂的任务。为了简化这一过程&#xff0c;Unity 提供了 PlatformEffec…

JVM(五)——类加载阶段

一、类加载阶段 一个类型从被加载到虚拟机内存中开始&#xff0c;到卸载出内存为止&#xff0c;它的整个生命周期将会经历加载 &#xff08;Loading&#xff09;、验证&#xff08;Verification&#xff09;、准备&#xff08;Preparation&#xff09;、解析&#xff08;Resol…

基于PHP高校网上教材征订系统的设计与实现(论文+源码)_kaic

高校网上教材征订系统设计与实现 摘 要 本高校网上教材征订系统是针对目前高校网上教材征订管理的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的高校网上教材征订系统存在的问题进行分析&#xff0c;结合计算机系统的结构、概念、模型、原理、方法&#xff0c;在计算…

VBA高级应用30例应用2:MouseMove鼠标左键按下并移动鼠标事件

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

【GitLab】Ubuntu 22.04 快速安装 GitLab

在 Ubuntu 22.04 上安装最新版本的 GitLab&#xff0c;可以按照以下步骤操作&#xff1a; 1. 更新系统&#xff1a; 在终端中执行以下命令以确保系统是最新的&#xff1a; sudo apt update sudo apt upgrade2. 安装依赖&#xff1a; 安装 GitLab 所需的依赖包&#xff1a; …

唯美动态个人404页面源码

源码介绍 手机端先加载静态图再缓慢加载gif动图&#xff0c;电脑端先加载静态图在加载mp4。提升打开速度&#xff01; 源码截图 下载地址 唯美动态个人404页面源码

BUG定位---一起学习吧之测试

判断一个BUG是前端还是后端的&#xff0c;通常需要根据BUG的具体表现、发生的环境以及相关的技术栈来进行分析。以下是一些常用的判断方法&#xff1a; 错误发生的位置&#xff1a; 如果BUG涉及的是页面的布局、样式、交互效果等&#xff0c;那么很可能是前端的BUG。如果BUG与…

架构师之路--Docker的技术学习路径

Docker 的技术学习路径 一、引言 Docker 是一个开源的应用容器引擎&#xff0c;它可以让开发者将应用程序及其依赖包打包成一个可移植的容器&#xff0c;然后在任何支持 Docker 的操作系统上运行。Docker 具有轻量级、快速部署、可移植性强等优点&#xff0c;因此在现代软件开…

自定义你的商店 – 设计WooCommerce商店的新方法

WooCommerce 8.8即将推出&#xff0c;带来了一种无需代码即可创建精美商店的新方法。向“自定义你的商店”问好&#xff0c;这是一项全新功能&#xff0c;将取代“个性化你的商店”入门步骤。 自定义你的商店将利用最新的WordPress站点编辑工具以及酷炫的新Pattern Assembler …

RHCE-网络服务实验1

要求: 请给openlab搭建web网站 网站需求: 基于域名www.epenlab.com可以访问网站内容为 welcome to openlab!!!给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于www.openlab.com/student 网站访问学生信息&#xff0c;www.openlab.com/…

简单了解C++线程库

thread类简单介绍 在C11之前&#xff0c;涉及到多线程问题&#xff0c;都是和平台相关的&#xff0c;比如windows和linux下各有自己的接 口&#xff0c;这使得代码的可移植性比较差。C11中最重要的特性就是对线程进行支持了&#xff0c;使得C在 并行编程时不需要依赖第三方库…

Llama模型下载

最近llama模型下载的方式又又变了&#xff0c;所以今天简单更新一篇文章&#xff0c;关于下载的&#xff0c;首先上官网&#xff0c;不管在哪里下载你都要去官网登记一下信息&#xff1a;https://llama.meta.com/llama2 然后会出现下面的信息登记网页&#xff1a; 我这里因为待…

9.windows ubuntu 子系统,centrifuge:微生物物种分类。

上次我们用了karken2和bracken进行了物种分类&#xff0c;这次我们使用centrifuge. Centrifuge 是一种用于快速和准确进行微生物分类和物种鉴定的软件。其主要功能包括&#xff1a; 快速分类和物种鉴定: Centrifuge 可以对高通量测序数据&#xff08;如 metagenomic 或 RNA-Se…