servlet开发

一、Servelet

(一)Servelet概述

1.概念:Severlet是一门动态web资源开发技术。

2.本质:Severlet本质是一段Java程序,但和Java程序不同的是,Severlet程序无法独立运行,需要放服务器中,

3.程序作用:运行在服务器端的Severlet程序作用是对服务器接收的请求进行处理。

(二)开发Servelet程序

1.主要开发步骤:

第一步:自定义类,继承HttpServlet从而继承GenericServelet类。

  • 重点是:重写抽象父类中doPost()和doGet()两个方法,对应处理浏览器的Post提交和Get提交。

第二步:配置web.xml文件,具体配置方式如下方。

2.开发细节:

  • Servelet在web.xml中的配置(Serverlet3.0以前):
    • 配置信息语法:

<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>MyServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/hl</url-pattern>
</servlet-mapping>

    • 配置说明:两组标签中的severlet-name必须一致。
      • <Servelet></Servelet>标签中配置的是一个severlet程序本身的信息。(服务器端的信息)
        • Servelet-name:指定虚拟服务器名。
        • Servelet-class:指定访问的虚拟服务器处理请求的程序。(即处理方法类名)
      • <Servelet-mapping><Servelet-mapping>标签中配置的访问Servelet程序的方法。(客户端的信息)
        • Servelet-name:指定要访问的虚拟服务器名。
        • url-pattern:指定要访问虚拟服务器的虚拟路径。(hl前必须有/:代表标签中内容是一个路径,而不是一个文件)。
      • 每一个Servelet都需要单独一组<Servelet></Servelet>和<Servelet-mapping><Servelet-mapping>标签。不能使用一组该标签同时配置多个servelet。
  • Servelet注解配置(Serverlet3.0以后):
    • 配置语法:@WebServlet(name="className", [value=]"decName")
    • 配置字段:
      • name字段:用于指定servelet处理请求的类名。相当于web.xml中的servlet-name标签。
      • value字段:用于指定浏览器访问路径。相当于web.xml中的url-pattern标签。
        • value字段本质是一个字符串数组,因此可以在value字段中以初始化字符串数组的方式,配置多个访问路径。
        • 可以使用urlPattern字段代替value字段:urlPattern=[{]"decName1"[,...,"decNameN"][}]。
  • 配置说明:
    • 配置web.xml就不用配置@WebServle()注解,配置注解就不用配置web.xml;
    • 二者同时配置时,web.xml与注解同时起作用。(待验证)

二、Servelet程序调用过程(即在服务器端执行过程):

  • 具体过程:
    • 服务器接收浏览器发出的请求->创建request对象和response对象。
      • 通过Host:请求头获取到虚拟主机名
      • 通过请求行获取要访问的web应用
      • 通过资源路径获取访问资源相对路径
      • 与web.xml文件中的url-pattern标签比较,如果存在,则查找处理类并通过反射构造该类对象RefObj。如果不存在则返回404。
      • tomcat将请求行、请求头、请求内容封装成请求对象request;通过反射类doGet()/doPost()方法,服务器响应封装成响应对象response。
    • ->调用RefObj.service(request,response);将response中获取要发送给浏览器的数据按照Http协议规定方式组成响应消息,再发送给浏览器形成http响应。
    • ->浏览器得到响应内容并解析至浏览器中。
  • request对象和response对象
    • request对象代表Http请求信息的对象。
    • response对象代表Http响应信息的对象。
    • 创建和销毁过程:
      • 当浏览器发请求服务器中的某个servelet时,tomcat会创建出request和response对象,之后将会调用Servelet中的service方法处理请求。
      • 其中request对象中封装浏览器发送给服务器的请求信息,包括:请求行、请求头和请求实体等。response对象将封装服务器要发送给浏览器的响应信息,包括:响应行、响应头和响应实体。
      • 在service方法执行完后,tomcat再将response中的数据取出,按照Http协议的格式发送给浏览器。
      • 每次浏览器访问tomcat,tomcat在调用service方法处理请求之前都会创建request和response对象。在请求处理完毕,响应结束时,tomcat会销毁request和response对象。

三、request对象

  • 作用:Servelet通过request对象获取浏览器提交的请求信息。

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

(1)请求参数:

  • 概念:浏览器发送给服务器的数据称为请求参数。
  • 常见请求参数:通过表单向服务器提交数据或在浏览器地址栏url地址后面拼接的参数。
  • severlet处理方式:将浏览器提交的数据以key-value的方式存储在map中。

(2)获取请求参数:

  • request.getParameter(String ParamName);
    • 说明:
      • 针对单值参数,根据请求参数的名字,只会返回对应的value值。
      • 如果获取的参数有多个值,咐返回第一个值。
      • 如果获取一个不存在的参数,返回值为null.
  • request.getParameterValues(String ParamName);

(3)解决获取请求参数的乱码问题

  • 乱码产生的原因:
    • 如果是Get提交:
      • tomcat服务器版本为8.0及以上,Get提交不存在乱码问题。
      • tomcat服务器版本为7.0及以下,Get提交存在乱码问题。
        • 解决方式:在[tomcat安装目录]/conf/server.xml文件中的Connector标签上,添加一个URIEncoding="utf-8"属性。如下:<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8" />。
        • 如果eclipse开发时,需要在[eclipse]/Servers/[当前tomcat服务器对应的配置目录]、server.xml文件中的Connector标签添加URIEncoding="utf-8"属性。
    • 如果是Post提交:不管是tomcat哪个版本,都会出现乱码。
      • 原因:tomcat底层在接收Post请求提交的参数时,默认使用iso8859-1字符集,该字符集中不包含中文字符。当接收中文参数时,必将出现乱码。
      • 解决乱码:通知服务器在接收Post提交参数时,使用utf-8编码来接收。
        • 方法:request.setCharacterEncoding("utf-8");
        • 作用范围:该方法只对Post提交有效,不会影响Get提交。
        • 使用位置:该行代码一定要放在任何获取参数代码之前。

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

(1)请求转发的概念:

  • 当浏览器访问服务器中的某一资源(A),资源(A)没有进行处理请求,而将请求转交给另外一个资源(B),由资源(B)对请求进行响应的过程叫做请求转发。

(2)请求转发的特点:

  • 一次请求,一次响应
  • 请求转发前后,地址栏不会发生变化。(A->B时,从访问A开始,到B响应结束,地址栏的地址一直指向A)。
  • 请求转发只能是同一个web应用内部的资源跳转(A->B时,A和B必须属于同一个Web应用)。
  • 和域对象配合,在转发时,可以带数据到目的地(A->时,A可以带数据给B,此时通常A为severlet,B为.jsp文件)。

(3)实现请求转发:

  • request.getRequestDispatcher(String url).forward(req,res);
  • 实现细节:
    • url必须是web.xml文件中要转发的servelet的servelet-mapping标签中url-pattern标签的内容。否则则会返回404。

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

(1)作用域对象:如果一个对象具备可以被访问的范围,通过这个对象上的map集合可以在整个范围内实现数据的共享,这样的对象就叫做作用域对象。

(2)request域对象:request在实现转发时,通过request对象中的map集合共享数据,该request对象上map集合民及request对象所在的范围称为域对象。

(3)使用方法:request对象提供了往域对象中存储和获取数据的方法。

  • 存储的数据
    • 语法:
      • request.setAttribute(String keyName, Object value);
    • 说明:
      • 参数:
        • String keyName:指往request域中要存放的属性名。
        • Object value:指要存储的属性值。
  • 获取数据
    • 语法:request.getAttribute(Sting keyName);
    • 说明:
      • 参数:String keyName:指要获取request域中存放属性的属性名。

(4)request域对象的三大特征

  • 生命周期:伴随着request创建开始,直到request销毁而结束。
  • 作用范围:在一次请求范围内,都可以获取到同一个request对象。
  • 主要功能:和请求转发配合使用,从Servelet带数据到JSP(即数据目的地)。

(5)request对象getParameter方法与getAttribute方法的区别

  • 当获取请求参数时:
    • 参数是被封装成request对象的某个成员,需要通过request的getParameter()方法获取。参数的封装是由tomcat在封装request对象时完成。
    • 参数将被封装成request的域map集合的某个元素,需要通过request的getAttibute()方法获取。参数的封装是由程序员在doGet()方法完成的。参数值是由程序员自定义的。

(6)转发实现

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

四、response对象

作用:Servelet通过response对象将响应信息发送给浏览器。

1.常用操作一:向浏览器发送信息。

  • 实现方式:实现并维护一个PrintWriter对象。
    • 作用:该对象本质上是一个流。可以将该对象当作一个html编译器。把在html标签及属性以按照html语法格式,封装成一个字符串写入一个.html/.jsp文件。
  • 实现过程:
    • 第一步:创建并维护PrintWriter对象:PrintWriter out = response.getWriter();
    • 第二步:封装实参并写入目标文件:out.Println("<h1>内容</h1>");
  • 存在问题:会出现中文乱码。
    • 原因:服务器在通过response获取的流在发送数据时,默认使用的是iso8859-1字符集。
    • 解决方式:在发送响应数据前,通知服务器使用utf-8字符集。
      • 具体方法:在第一步前加入代码:response.setContentType("utf-8");

2.常用操作二:实现重定向。

  • 重定向概念:
    • 当浏览器向服务器发请求访问某一资源A时,资源A无法处理响应,而是通知浏览器需要再进一步请求别的资源B才能获取对应的资源,浏览器再次请求服务器中的资源B,最终由资源B响应浏览器的过程就叫重定向。
  • 重定向的特点:
    • 重定向是两次请求,两次响应。
    • 重定向前后,浏览器的地址栏的url会发生变化。(因为两次请求都是通过浏览器发起,浏览器知道跳转过程,造成url变化。
    • 重定向前后的request对象不是同一个(因为浏览器每次发送请求时,都会重新创建request对象。因此不能通过request带数据到目的地)。
    • 重定向前后的两个资源可以是来自不同的web应用,甚至可以是来自不同的服务器(进行跳转的两个资源之间没有限制)。
  • 重定向的实现:
    • 代码:response.sendRedirect("重定向资源的url");
    • 关于重定向资源的url:
      • 可以是同一web应用下的其它文件,如:fileName.fileType。
      • 可以是同一虚拟主机的其它web应用的资源,如:/webAppName/[resourceDecName/]fileName.filetype。
      • 可以是其它虚拟主机,如:http://www.baidu.com.

五、请求转发与请求重定向

(一)两者区别:

1.转发是一次请求,一次响应;重定向是两次转发,两次响应。

2.转发前后地址栏不会发生变化;重定向前后地址栏会发生变化。

3.转发前后request对象是同一个,可以使用域对象带数据至目标资源;重定向前后则不是,不能结合域对象带数据至目标文件。

4.转发要求两个资源必须属于同一个web应用;重定向则对两个资源无限制。

(二)两者选择:

1.希望对跳转资源无限制时,使用重定向。

2.希望在资源跳转间带数据时,使用转发。

3.如果仅仅是做一次跳转,没有其他要求时,推荐使用转发(可以减少对服务器的访问次数,减小服务器访问压力)。

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

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

相关文章

ArcGIS003:ArcMap常用操作0-50例动图演示

摘要&#xff1a;本文以动图形式介绍了ArcMap软件的基本操作&#xff0c;包括快捷方式创建、管理许可服务、操作界面元素&#xff08;如内容列表、目录树、搜索窗口、工具箱、Python窗口、模型构建器窗口等&#xff09;的打开与关闭、位置调整及合并&#xff0c;设置默认工作目…

链表|反转链表|移除链表元素|链表的中间节点|返回倒数第k个节点|合并两个有序链表(C)

206. 反转链表 用两个指针 p1指向空&#xff0c;p2指向第一个节点 p2的next指向p1&#xff0c;把方向调过来 因为p2的next指向p1&#xff0c;会丢掉后面的节点&#xff0c;所以需要三个节点 前两个指针是为了反转&#xff0c;后一个指针是为了找到下一个节点 p2给给p1&a…

GitGraphPro 图管理系统

1.产品介绍 产品介绍方案 产品名称: GitGraphPro 图管理系统 主要功能: 智能图谱构建版本控制与协作数据分析与可视化自定义模板与导出功能介绍: 1. 智能图谱构建 具体作用:GitGraphPro 利用先进的算法,自动从项目数据

一:时序数据库-Influx应用

目录 0、版本号 1、登录页面 2、账号基本信息 3、数据库案例 4、可视化 5、java案例 0、版本号 InfluxDB v2.4.0 1、登录页面 http://127.0.0.1:8086/signin 账号&#xff1a;自己账号 密码&#xff1a;自己密码 2、账号基本信息 查看用户id和组织id&#xff01;&…

python脚本:十六进制数据小端序转大端序

大多数机器的存储方式都是小端排序&#xff0c;小端序指的是数据的高位&#xff08;偏左边的&#xff09;放在内存中的高地址&#xff08;偏右边的&#xff09;处&#xff0c;这样会导致存放好的数据对于我们看来好像是“倒过来”的 大端序则是我们看上去从左到右的正常排序 例…

流场主动流动控制

对于流场的主动控制而言&#xff0c;其难点主要集中在强化学习的环境搭建过程&#xff0c;如何建立数值仿真与强化学习的信息交互是研究过程中的拦路虎。经过几个星期的研究&#xff0c;已基本实现由pycharm程序数据端向star ccm端的数据传递。其主要过程包括如下过程&#xff…

Django-文件上传

定义&#xff1a; 上传规则-前端【html】&#xff1a; 上传规则-后端【Django】&#xff1a; urlpatterns [path(upload,views.test_upload) ] 例子&#xff1a; settings添加: MEDIA_URL /media/ MEDIA_ROOT os.path.join(BASE_DIR, media) 主路由&#xff1a; urlpa…

kafka-console-ui的简介及安装使用

kafka-console-ui的简介及安装使用 一、kafka-console-ui的简介二、安装kafka-console-ui2.1 源码安装2.2 docker安装 三、kafka-console-ui功能使用3.1、功能特性3.2、 功能介绍3.2.1 集群3.2.2 topic3.2.3 消费组3.2.4 Acl3.2.5 运维 一、kafka-console-ui的简介 kafka-cons…

ONLYOFFICE 8.2 版本产品评测——遥遥领先

知孤云出岫-CSDN博客 目录 产品介绍——篇【1】 一.关于 ONLYOFFICE 桌面编辑器 二.关于 ONLYOFFICE 协作空间 三.关于 ONLYOFFICE 文档 四.关于 ONLYOFFICE的版本介绍 产品新功能——篇【2】 一.关于 ONLYOFFICE的新增功能介绍 二.OLE FICE文档概述 三.PDF编辑器更新 …

星河飞雪网络安全学习笔记-shodan使用7(完结)

学习笔记-shodan使用7 Shodan命令 info shodan info查询账户搜索次数。 Domain shodan domain baidu.com查询ip域名信息 Scan shodan scan submit ip对ip进行实时扫描&#xff0c;类似nmap。 shodan scan list显示扫描信息。 Stats shodan stats --facets ssl.version countr…

【原创分享】详述中间件的前世今生

中间件是一种软件组件&#xff0c;位于应用程序和操作系统之间&#xff0c;通过提供统一的接口和功能来简化开发和管理应用程序、提高应用程序的可靠性和性能。 中间件的前世可以追溯到20世纪80年代的分布式系统和网络技术的发展。在那个时候&#xff0c;随着计算机网络的普及…

Python | Leetcode Python题解之第524题通过删除字母匹配到字典里最长单词

题目&#xff1a; 题解&#xff1a; class Solution:def findLongestWord(self, s: str, dictionary: List[str]) -> str:m len(s)f [[0] * 26 for _ in range(m)]f.append([m] * 26)for i in range(m - 1, -1, -1):for j in range(26):if ord(s[i]) j 97:f[i][j] iel…

论文翻译 | PROMPTAGATOR : FEW-SHOT DENSE RETRIEVAL FROM 8 EXAMPLES

摘要 最近的信息检索研究主要集中在如何从一个任务&#xff08;通常有丰富的监督数据&#xff09;转移到其他各种监督有限的任务上&#xff0c;其隐含的假设是从一个任务可以泛化到所有其他任务。然而&#xff0c;这忽略了这样一个事实&#xff0c;即存在许多多样化和独特的检索…

AIGC时代的网络威胁和防御

AIGC时代的网络威胁和防御 1. 生成式AI是否将成为网络威胁者的战术新宠&#xff1f;​论文地址​研究背景​主要贡献​攻击方法​示例​研究结论​ 2. LLM Honeypot: 利用大型语言模型打造先进的交互式蜜罐系统​论文地址​一、研究背景​二、研究方法​&#xff08;一&#xf…

mysql中的锁理解

1.共享锁&#xff0c;排他锁&#xff0c;也叫读锁和写锁 共享锁(S锁)(读锁)&#xff1a;事务在读取记录的时候获取共享锁&#xff0c;允许其它事务同时获取共享锁。 排他锁(X锁)(写锁)&#xff1a;事务在修改记录的时候获取排他锁&#xff0c;只允许一个事务获取排他锁&#x…

聚水潭数据集成到MySQL的技术实操与解决方案

聚水潭数据集成到MySQL的技术案例分享 在现代企业的数据管理过程中&#xff0c;如何高效、可靠地实现不同系统之间的数据对接是一个关键问题。本案例将聚焦于“聚水谭-仓库查询单-->BI邦盈-仓库表”的数据集成方案&#xff0c;详细探讨如何通过轻易云数据集成平台&#xff…

鸿蒙系统的优势 不足以及兼容性与未来发展前景分析

2024 年 10 月 22 日&#xff1a;华为正式发布原生鸿蒙操作系统 HarmonyOS next&#xff0c;并正式命名为 HarmonyOS 5&#xff0c;这是鸿蒙系统史上最大的升级&#xff0c;实现了国产操作系统从底层架构到应用生态的全面自主可控。 鸿蒙系统与安卓、iOS 相比&#xff0c;具有…

C++:哈希表

目录 哈希的概念 直接定址法 哈希冲突 负载因子 哈希函数 除法散列法/除留余数法 乘法散列法 处理哈希冲突 开放定址法 线性探测 二次探测 双重散列 链地址法 哈希表的实现 哈希表的结构 闭散列&#xff08;开放定址法&#xff09; 结构 插入 查找 删除 …

Java系统学习笔记

计算机知识 CMD 环境变量 想要在任意目录下都可以打开指定的软件&#xff0c;就可以把软件的路径配置到环境变量中。 JDK JDK安装目录中 javac 是JDK提供的一个工具&#xff0c;可以通过这个工具&#xff0c;把java文件编译成class文件 java 也是JDK提供的一个工具&#xf…

C语言部分输入输出(printf函数与scanf函数,getchar与putchar详解,使用Linux ubuntu)

1.输入输出 1.1.按格式输入输出 printf 可以在man手册中查看 int printf(const char *format, ...); printf:函数名(参数)int:函数的返回值 功能&#xff1a;按格式在终端输出 参数&#xff1a;多参 返回值&#xff1a;输出字符个数 格式&#xff1a; %d int %c char…