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.

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

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

相关文章

金融投贷通(金融投资+贷款通)项目准备

金融投贷通&#xff08;金融投资贷款通&#xff09;项目准备 专业术语投资专业术语本息专业术语还款专业术语项目介绍三个子系统技术架构核心流程发布借款标投资业务 项目实施测试流程测试步骤 专业术语 投资专业术语 案例&#xff1a;张三借给李四5W&#xff0c;约定期满1年后…

大模型论文阅读:ADAPTIVE BUDGET ALLOCATION FOR PARAMETEREFFICIENT FINE-TUNING

大模型论文阅读:ADAPTIVE BUDGET ALLOCATION FOR PARAMETEREFFICIENT FINE-TUNING 论文链接:https://arxiv.org/pdf/2303.10512v1.pdf 当存在大量下游任务时,微调所有预训练模型的参数变得不可行。因此,为了以参数高效的方式学习预训练权重的增量更新,提出了许多微调方法,…

【Linux】详细分析/dev/loop的基本知识 | 空间满了的解决方法

目录 前言1. 基本知识2. 内存满了2.1 清空2.2 扩增 3. 彩蛋 前言 服务器一直down机&#xff0c;翻找日志文件一直找不到缘由&#xff0c;最终发现是挂载的内存满了&#xff0c;那本身这个文件就什么用呢&#xff1f; 1. 基本知识 /dev/loop是一种特殊的设备文件&#xff0c;…

【题解】—— LeetCode一周小结12

【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结11 18.区域和检索 - 数组不可变 题目链接&#xff1a;303. 区域和检索 - 数组不可变 1.计算索引 left 和 right &#xff08;包含 left 和 right&#xff09;之间的 nums 元素的 和 &#xff0c;其…

倍压器电路原理及仿真

倍压器是利用二极管单向导通的特性和电容两端电压不能突变且可以存储能量的特性&#xff0c;使得能量逐步往后级输送&#xff0c;同时线路上的电压也逐渐升高。因此&#xff0c;它可以实现将较低的交流电压转换成一个较高的直流电压。根据倍压的原理&#xff0c;有二倍压、三倍…

WEB DDOS的安全策略

近年来网络攻击的数量和频率急剧上升&#xff0c;针对Web应用程序的DDoS海啸攻击就是其中增长非常迅速的一个种类。过去常见的HTTP/S洪水攻击正在大范围的转变为更难对付的Web DDoS海啸攻击&#xff0c;网络安全空间攻防对抗越演越烈&#xff0c;企业用户面临更加严峻的网络安全…

视频号下载提取器如何下载视频,该方法永不过时

如今我们每天都会在社交媒体、视频平台上发现无数精彩的内容。无论是教育性讲座、创意短片还是生活分享&#xff0c;我们都希望能将这些视频保存到本地以便日后观看。特别是遇到自己特别好玩的视频就特别想把他下载下来。 这时&#xff0c;一款高效且免费的“视频号下载提取器”…

centos7.9下安装Redis

1. 概述 官网&#xff1a;https://redis.io/download/ Redis&#xff08;Remote Dictionary Server&#xff09;&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSI C语言编写、支持 网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言…

目前2024年腾讯云4核8G服务器租用优惠价格表

2024年腾讯云4核8G服务器租用优惠价格&#xff1a;轻量应用服务器4核8G12M带宽646元15个月&#xff0c;CVM云服务器S5实例优惠价格1437.24元买一年送3个月&#xff0c;腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云4核8G服务器优惠价格 轻…

单臂路由和三层交换机

目录 一.单臂路由 1.单臂路由的工作原理 2.单臂路由的配置 2.1画出拓扑图 2.2配置PC 2.3配置交换机 2.4配置路由器 2.5测试 二.三层交换机 1.三层交换机的概述 2.三层交换机的配置 2.1画出拓扑图 2.2配置PC 2.3配置二层交换机 2.4配置三层交换机 2.5测试 3.拓展 三.总结 一.…

【Java程序设计】【C00385】基于(JavaWeb)Springboot的员工信息管理系统(有论文)

基于&#xff08;JavaWeb&#xff09;Springboot的员工信息管理系统 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c…

前端学习<二>CSS基础——04-CSS选择器:伪类

伪类&#xff08;伪类选择器&#xff09; 伪类&#xff1a;同一个标签&#xff0c;根据其不同的种状态&#xff0c;有不同的样式。这就叫做“伪类”。伪类用冒号来表示。 比如div是属于box类&#xff0c;这一点很明确&#xff0c;就是属于box类。但是a属于什么类&#xff1f;…