servlet开发详解

一、什么是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.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图形界面开发-framebuffer技术

https://www.linuxidc.com/Linux/2012-05/61024.htm 1、framebuffer 帧缓冲 帧缓冲&#xff08;framebuffer&#xff09;是Linux 系统为显示设备提供的一个接口&#xff0c;它将显示缓冲区抽象&#xff0c;屏蔽图像硬件的底层差异&#xff0c;允许上层应用程序在图形模式下直接…

SPU赋能PSI:探秘隐私集合求交核心技术与高级调度架构实践

1.SPU实现的PSI介绍 1.PSI的定义和种类 隐私集合求交&#xff08;Private Set Intersection, PSI&#xff09;是一种在密码学和安全多方计算&#xff08;MPC&#xff09;领域中的关键技术&#xff0c;允许两个或多个参与者在不泄露各自输入集合中非交集部分的前提下&#xff…

基于单片机防丢失设备的设计和实践

摘要:防止老人或者小孩走丢走失,还可以放在汽车里,利用GPS系统,设计实现了基于单片机的防丢失设备。设备利用液晶显示屏显示信息,并实时发送位置短信到手机传输当前位置的纬度和经度坐标,实现了定位与监测功能。测试结果表明,利用该设备和手机可以同时观察老人或小孩携带…

Manacher算法学习笔记(洛谷题单 Part 5.3 Manacher)

0.随便说说 字符串学的太差了&#xff0c;每次字符串算法都是学完了就忘&#xff0c;正好上场 c f d i v 1 B cfdiv1B cfdiv1B考了一个 M a n a c h e r Manacher Manacher&#xff0c;就先复习它了。 1.一些概念 子串 ( s u b s t r i n g ) (substring) (substring)&#…

【Java程序设计】【C00381】基于(JavaWeb)Springboot的爱心商城管理系统(有论文)

【C00381】基于&#xff08;JavaWeb&#xff09;Springboot的爱心商城管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#x…

外包干了4年,技术退步明显。。。。

说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入上海某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…

Python环境下一种新的类谱峭度算法的旋转机械故障诊断模型

谱峭度SK的本质是计算每根谱线峭度值的高阶统计量&#xff0c;谱峭度对信号中的瞬态冲击成分十分敏感&#xff0c;能有效的从含有背景噪声信号中识别瞬态冲击及其在频带中的分布。由于谱峭度的复杂性、缺少一个正式的定义和一个容易理解的计算过程使其在很长时间内都未能引入到…

Netty教程之NIO基础

NIO 介绍 NIO 全称java non-blocking IO&#xff08;非阻塞 I/O&#xff09;&#xff0c;后续提供了一系列改进的输入/输出的新特性&#xff0c;被统称为 NIO(即 New IO)&#xff0c;是同步非阻塞的。 阻塞和非阻塞是进程在访问数据的时候&#xff0c;数据是否准备就绪的一种…

光伏百科|分布式光伏电站如何开展运维管理工作?

随着经济的不断发展和生活水平的日益提高&#xff0c;节能环保已经成为全社会的责任和共识&#xff0c;分布式光伏电站作为清洁能源走进了千家万户。然而&#xff0c;在分布式光伏电站运行期间&#xff0c;面临监管困难、系统繁多、火灾隐患和运维不当等困难&#xff0c;该如何…

2024年【G2电站锅炉司炉】考试及G2电站锅炉司炉找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 G2电站锅炉司炉考试考前必练&#xff01;安全生产模拟考试一点通每个月更新G2电站锅炉司炉找解析题目及答案&#xff01;多做几遍&#xff0c;其实通过G2电站锅炉司炉复审模拟考试很简单。 1、【多选题】下列为锅炉的…

Python爬虫之爬取网页图片

当我们想要下载网页的图片时&#xff0c;发现网页的图片太多了&#xff0c;无从下手&#xff0c;那我们写一个脚本来爬取呗。 这次的脚本是专门针对某个外国网站使用的&#xff0c;因此仅供参考思路。 在测试的过程中&#xff0c;我发现网站使用了发爬虫机制&#xff0c;具体就…

蓝桥杯-网络安全比赛(2)基础学习-正则表达式匹配电话号码、HTTP网址、IP地址、密码校验

正则表达式&#xff08;Regular Expression&#xff09;&#xff1a;定义&#xff1a;一种强大的文本处理工具&#xff0c;用于描述、匹配和查找字符串中的特定模式。应用&#xff1a;密码验证、文本搜索和替换、数据清洗等。特点&#xff1a;通过特定的元字符和规则来构建复杂…

vcf文件可以用excel打开吗?四种解决方案

vcf文件可以用excel打开吗&#xff1f; 当然可以。 一、VCF文件简介 VCF&#xff08;vCard&#xff09;文件是一种用于存储联系人信息的文件格式。它通常包含姓名、电话号码、电子邮件地址、地址等详细信息。VCF文件在多种设备和操作系统中广泛使用&#xff0c;特别是在电子邮…

2024年【G3锅炉水处理】考试题及G3锅炉水处理考试报名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 G3锅炉水处理考试题参考答案及G3锅炉水处理考试试题解析是安全生产模拟考试一点通题库老师及G3锅炉水处理操作证已考过的学员汇总&#xff0c;相对有效帮助G3锅炉水处理考试报名学员顺利通过考试。 1、【多选题】锅筒…

【八股】2024春招八股复习笔记2(大数据开发,Java)

【八股】2024春招八股复习笔记2&#xff08;大数据开发&#xff09; 文章目录 1、大数据存储&#xff08;Flume、Hive、HBase、HDFS&#xff09;2、大数据计算&#xff08;MapReduce&#xff0c;Spark、Flink&#xff09;3、大数据集群&#xff08;Yarn、ZooKeeper、kafka&…

部署云原生边缘计算平台kubeedge

文章目录 1、kubeedge架构2、基础服务提供 负载均衡器 metallb2.1、开启ipvc模式中的strictARP2.2、部署metalb2.2.1、创建IP地址池2.2.2、开启二层转发&#xff0c;实现在k8s集群节点外访问2.2.3、测试 3、部署cloudcore3.1、部署cloudcore3.2、修改cloudcore的网络类型 4、部…

二叉树|450.删除二叉搜索树中的节点

力扣题目链接 class Solution { public:TreeNode* deleteNode(TreeNode* root, int key) {if (root nullptr) return root; // 第一种情况&#xff1a;没找到删除的节点&#xff0c;遍历到空节点直接返回了if (root->val key) {// 第二种情况&#xff1a;左右孩子都为空&…

2024年第六届机器人系统与自动化工程国际会议(RSAE 2024)即将召开!

2024年第六届机器人系统与自动化工程国际会议&#xff08;RSAE 2024&#xff09;将于2024年6月21-23日在日本东京召开。RSAE 2024 的主要目标是加强合作&#xff0c;并为院士、专业人士和研究人员提供一个论坛&#xff0c;交流他们的研究成果、创新理念和解决方案&#xff0c;包…

【网络】:数据链路层

数据链路层 一.以太网帧格式二.认识MTU三.ARP协议1.ARP协议的工作流程2.ARP数据报的格式3.ARP欺骗 四.其他重要协议或技术1.DNS2.ICMP协议3.NAT技术&#xff08;重点&#xff09;4.代理服务器 五.一些问题 认识以太网 “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含…

dump文件分析OOM及线程堆栈

OutOfMemoryError (OOM) 如果项目报错&#xff1a; OutOfMemoryError: Java heap space&#xff0c;说明堆内存空间&#xff08;Heap Space&#xff09;中没有足够的空间来分配对象了。 一旦发生 OOM&#xff0c;系统有可能不可用&#xff0c;或者频繁重启。属于非常严重的问题…